vue中给window添加滚动监听无效的解决方案
原文链接: 点我
页面中有这么一个需求,当页面滚动到一定高度之后,页面中的某些元素进行吸顶,固定到顶部位置,或者是滚动到一定程度进行更新数据的操作。
我相信不少网友查阅过类似的资料,网友给出的解决方案,很多都是在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添加滚动监听无效的解决方案的更多相关文章
- React 函数组件中对window添加事件监听resize导致回调不能获得Hooks最新状态的问题解决思路
React 函数组件中对window添加事件监听resize导致回调不能获得Hooks最新状态的问题解决思路 这几天在忙着把自己做的项目中的类组件转化为功能相同的函数组件,首先先贴一份该组件类组件的关 ...
- vue中进行窗口变化的监听
今天vue项目中用到的元素的宽度依赖与窗口的宽度,所以在进行宽度设置的时候涉及到窗口的变化,因为元素的宽度要随着窗口变化 分成几个步骤来实现这一过程 1.首先元素的宽度依赖与窗口的宽度,就需要有接受窗 ...
- 关于Vue中,使用watch同时监听两个值的实现方法
1. 先在computed中,用需要监听的两个值(start.end)定义一个对象(dateRange) computed: { dateRange () { const { start, end } ...
- iOS ARC中CTCallCenter没用,无法监听电话的解决方案
今天在尝试使用CTCallCenter进行电话监听时,发现一直无法捕获电话状态改变的事件,研究了一番之后找到了解决方案,在这里分享给大家. 首先使用CTCallCenter监听电话的代码如下: CTC ...
- Bootstrap学习js插件篇之滚动监听
1.滚动监听 案例 滚动监听插件可以根据滚动条的位置自动更新所对应的导航标记.Bootstrap中文网左侧就是一个滚动监听的例子. 代码段: <nav id="navbar-examp ...
- Bootstrap-Plugin:滚动监听(Scrollspy)插件
ylbtech-Bootstrap-Plugin:滚动监听(Scrollspy)插件 1.返回顶部 1. Bootstrap 滚动监听(Scrollspy)插件 滚动监听(Scrollspy)插件,即 ...
- vue监听滚动事件,实现滚动监听
在vue中实现滚动监听和原生js无太大差异,下面是一个简单的demo,可在控制台查看结果 <!DOCTYPE html> <html lang="en"> ...
- vue插件——滚动监听 vue-scrollwatch
造轮子的目的: 做项目的时候需要一个滚动监听的功能,html结构已经都写好了,不想使用vue组件的方式来写,因为不想改造html结构,于是花了几个小时做了一个简单的,使用vue指令方式来做的,项目上够 ...
- bootstap 滚动监听
---首先结合源代码介绍官网的说明 ---然后总结了使用滚动监听的几个步骤 ---最后给出一个简单的例子 ---关键的一点:整体有点零散和乱七八糟,辛苦你的思维和眼睛了,呵呵 ------------ ...
随机推荐
- Flutter 实现虎牙/斗鱼 弹幕效果
老孟导读:用Flutter实现弹幕功能,轻松实现虎牙.斗鱼的弹幕效果. 先来一张效果图: 实现原理 弹幕的实现原理非常简单,即将一条弹幕从左侧平移到右侧,当然我们要计算弹幕垂直方向上的偏移,不然所有的 ...
- "为文本添加下划线"组件:<u> —— 快应用组件库H-UI
 <import name="u" src="../Common/ui/h-ui/text/c_tag_underline"></impor ...
- 关于SQLAlchemy ORM框架
SQLAlchemy 1.介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用 ...
- 从谷歌面试翻车到offer收割的心路历程
首先声明,这只是我的播客随感,其中无法避免有一些个人色彩的见解,请不要在意,我尊敬任何的互联网公司,尊敬研究生期间的老师同学,我只希望给在求学路上的CS同学一些启发. 先介绍一下背景,我是ACM铜牌退 ...
- shell 脚本常用调试方法
曾经我刚开始学习 shell 脚本时,除了知道用 echo 输出一些信息外,并不知道其他方法,仅仅依赖 echo 来查找错误,比较难调试且过程繁琐.效率低下.本文介绍下我常用的一些 shell 脚本调 ...
- webpack 中常用安装插件的一些命令
1:npm install html-webpack-plugin --save-dev //自动快速的帮我们生成HTML.2:npm install css-loader style-loader ...
- vue2.x学习笔记(四)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12563162.html. 模板语法 vue使用了基于html的模板语法,允许开发者声明式地将dom绑定到底层vue ...
- 开始appium的第一个脚本
设置DesiredCapabilities 存在于以下库中: org.openqa.selenium.remote.DesiredCapabilities Desired Capabilities告诉 ...
- jmeter if控制器使用
if控制器有两种用法 1.不勾选“interpret condition as variable expression” 直接输入我们需要判断的表达式即可,判断表达式为真时,执行if控制器下的请求 2 ...
- 模糊字符串匹配:FuzzyWuzzy
FuzzyWuzzy 模糊字符串匹配,它使用Levenshtein Distance来计算简单易用的包中序列之间的差异. 前置条件 Python 2.7 or higher difflib pytho ...