原文链接: 点我

页面中有这么一个需求,当页面滚动到一定高度之后,页面中的某些元素进行吸顶,固定到顶部位置,或者是滚动到一定程度进行更新数据的操作。
我相信不少网友查阅过类似的资料,网友给出的解决方案,很多都是在mounted中添加

 window.addEventListener("scroll", this.handleScroll);

试了好多方法都不行,结果是我css样式写的有问题;

刚开始有用后来没用,之后排查发现是我给body设置了overflow:scroll(hidde)属性

采用这种形式来实现页面监听滚动的效果。
笔者最初也是采用了这种方式,刚开始可以实现想要的效果,后来,莫名其妙的就不可用了,经过一番探讨,使用监听组件滚动的形式来解决这个问题,至于通过window来实现监听为什么突然就不可用了,笔者暂时还不清楚什么原因造成的,有知道原因的欢迎留言。
想要实现监听组件滚动的效果,首先需要给需要监听的组件添加ref,以便可以通过this.$refs的形式拿到该元素的dom节点。
以简单示例来说明,有一个a.vue的组件,我想监听这个组件的滚动,那么在该组件的容器元素上添加ref=”a”,然后通过下面的代码形式来操作:

 // 通过$refs获取dom元素
this.box = this.$refs.a
// 监听这个dom的scroll事件
this.box.addEventListener('scroll', () => {
this.handleScroll();
}, false)

上述代码为处理组件滚动监听的主要代码内容。

 handleScroll() {
// 这是一个示例代码,打印出监听滚动的组件滚动距离
var scrollTop = this.$refs.a.scrollTop;
console.log(scrollTop);
}

同样的道理,如果想对a.vue组件内部的某一块结点区域进行滚动监听,也是采用这种方式。
注意点:
如果采用了上述方案没有实现监听滚动的效果,请检查是否出现以下问题:
需要监听滚动的元素结点是否给了height和overflow:scroll
需要监听滚动的元素结点的父元素结点是否设置了高度
在vux中,如果你使用了view-box,你需要给view-box一个高度,因为view-box的父元素高度为100%,所以笔者采取的方案就是将view-box的高度也设置为100%。

 <view-box ref="viewBox" style="height: 100%;">
<router-view></router-view>
</view-box>

经检测,此方案有效。

vue中给window添加滚动监听无效的解决方案的更多相关文章

  1. React 函数组件中对window添加事件监听resize导致回调不能获得Hooks最新状态的问题解决思路

    React 函数组件中对window添加事件监听resize导致回调不能获得Hooks最新状态的问题解决思路 这几天在忙着把自己做的项目中的类组件转化为功能相同的函数组件,首先先贴一份该组件类组件的关 ...

  2. vue中进行窗口变化的监听

    今天vue项目中用到的元素的宽度依赖与窗口的宽度,所以在进行宽度设置的时候涉及到窗口的变化,因为元素的宽度要随着窗口变化 分成几个步骤来实现这一过程 1.首先元素的宽度依赖与窗口的宽度,就需要有接受窗 ...

  3. 关于Vue中,使用watch同时监听两个值的实现方法

    1. 先在computed中,用需要监听的两个值(start.end)定义一个对象(dateRange) computed: { dateRange () { const { start, end } ...

  4. iOS ARC中CTCallCenter没用,无法监听电话的解决方案

    今天在尝试使用CTCallCenter进行电话监听时,发现一直无法捕获电话状态改变的事件,研究了一番之后找到了解决方案,在这里分享给大家. 首先使用CTCallCenter监听电话的代码如下: CTC ...

  5. Bootstrap学习js插件篇之滚动监听

    1.滚动监听 案例 滚动监听插件可以根据滚动条的位置自动更新所对应的导航标记.Bootstrap中文网左侧就是一个滚动监听的例子. 代码段: <nav id="navbar-examp ...

  6. Bootstrap-Plugin:滚动监听(Scrollspy)插件

    ylbtech-Bootstrap-Plugin:滚动监听(Scrollspy)插件 1.返回顶部 1. Bootstrap 滚动监听(Scrollspy)插件 滚动监听(Scrollspy)插件,即 ...

  7. vue监听滚动事件,实现滚动监听

    在vue中实现滚动监听和原生js无太大差异,下面是一个简单的demo,可在控制台查看结果 <!DOCTYPE html> <html lang="en"> ...

  8. vue插件——滚动监听 vue-scrollwatch

    造轮子的目的: 做项目的时候需要一个滚动监听的功能,html结构已经都写好了,不想使用vue组件的方式来写,因为不想改造html结构,于是花了几个小时做了一个简单的,使用vue指令方式来做的,项目上够 ...

  9. bootstap 滚动监听

    ---首先结合源代码介绍官网的说明 ---然后总结了使用滚动监听的几个步骤 ---最后给出一个简单的例子 ---关键的一点:整体有点零散和乱七八糟,辛苦你的思维和眼睛了,呵呵 ------------ ...

随机推荐

  1. 如何在 Array.forEach 中正确使用 Async

    本文译自How to use async functions with Array.forEach in Javascript - Tamás Sallai. 0. 如何异步遍历元素 在第一篇文章中, ...

  2. linux美化网址

    参考博文地址 https://blog.csdn.net/qq_42527676/article/details/91356154 https://www.opendesktop.org/ Dash ...

  3. LINUX解压缩 zip文件

    压缩当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip xxx.zip

  4. Java 数据持久化系列之 HikariCP (一)

    在上一篇<Java 数据持久化系列之池化技术>中,我们了解了池化技术,并使用 Apache-common-Pool2 实现了一个简单连接池,实验对比了它和 HikariCP.Druid 等 ...

  5. WordPress快速增加百度收录,加快网站内容抓取

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 利用百度站长平台提供的链接 ...

  6. 29.2 Iterator 迭代器ConcurrentModificationException:并发修改异常处理

    /** Iterator:迭代器* * 需求:判断集合中是否包含元素java,如果有则添加元素android * Exception in thread "main" java.u ...

  7. matplotlib Transform

    2020-04-09 15:09:02 -- Edit by yangray Transform 类是TransformNode的子类,它是所有执行变换的TransformNode的实例的基类.所有非 ...

  8. Hadoop(一) centos7 jdk安装,hadoop安装|3

    安装JDK 下载jdk https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择最 ...

  9. 【Selenium07篇】python+selenium实现Web自动化:PO模型,PageObject模式!

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第七篇博 ...

  10. Linux下搭建接口自动化测试平台

    前言 我们今天来学习一下在Linux下如何搭建基于HttpRunner开发的接口自动化测试平台吧! 需要在Linux上提前准备的环境(下面是本人搭建时的环境): 1,Python 3.6.8 (可参考 ...