vue中滚动事件绑定的函数无法调用问题
问题描述:
一个包含下拉加载的页面,刷新当前页然后滚动页面,能够正常触发滚动事件并调用回调函数,但是如果是进了某一个页面然后再进的该页面,滚动事件能够触发,
但是回调函数在滚动的时候只能被调用一次。
关键代码:
包含下拉加载的页面中,mounted中绑定scroll,在beforeRouteLeave中取消事件绑定
this.ele.addEventListener('scroll', this.getInvitationRecordUserList);
问题定位:
从其他页面进了之后再进该页面都可以正常滚动(在chrome浏览器上调试的时候,删除debugger再调试滚动事件,不然会影响调试),就某一个页面(记为a页面)进了再进就不行。
猜测:a页面中有影响滚动事件回调函数调用的方法,会不会是调用了阻止默认事件?
在a页面中发现如下代码:
这是一段处理在页面有弹窗时禁止弹窗下面的内容滚动的代码。
updated() {
const noScroll = (e) => {
e.preventDefault();
};
const body = document.body;
const html = document.querySelector('html');
if (this.show) {
this.$el.addEventListener('touchmove', noScroll, {passive: false});
} else {
this.$el.removeEventListener('touchmove', noScroll, {passive: false});
}
body.style.overflowY = this.show ? 'hidden' : 'auto';
html.style.overflowY = this.show ? 'hidden' : 'auto';
},
我们通过定位可能是调用了阻止默认事件的方法定位到这段代码,但最后发现了是body设置了auto影响了滚动回调函数的调用(不知道为什么会这样),最终改写了写法,在下拉加载的那个页面去使用局部滚动而不是使用全局滚动,那么其他页面的代码就不会影响这个页面的功能。
总结:不要随便在全局对象上去改东西,这样很容易出现不同页面相互影响的情况:
1、不要随便修改body/html的样式
2、不要用window.onscroll去绑定回调函数,用订阅模式去创建事件监听
vue中滚动事件绑定的函数无法调用问题的更多相关文章
- 微信小程序中的事件绑定
前言: 微信小程序中的事件绑定和Vue中的事件绑定其实有很多的相似之处,所以如果有过Vue相关的经验,学起来的话还是比较容易的. js代码: // 页面级的js文件必须调用Page函数来注册页面, / ...
- [Vue]vue中各选项及钩子函数执行顺序
在vue中,实例选项和钩子函数和{{}}表达式都是不需要手动调用就可以直接执行的. 一.生命周期图示 二.vue中各选项及钩子函数执行顺序 1.在页面首次加载执行顺序有如下: beforeCreate ...
- IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素
IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素. attachEvent(type,listener); listener函数中的 ...
- jQuery 中的事件绑定
一.事件概念 和数据库中的触发器一样,当操作了数据的时候会引发对应的触发器程序执行 一样,JS 中的事件就是对用户特定的行为作出相应的响应的过程,其实上就是浏览器 监听到用户的某些行为的时候会执行对应 ...
- 3-5 Vue中的样式绑定
Vue中的样式绑定: 本案例,简单设计一个<div>的点击绑定事件来改变div的样式效果 方法一:[class] ①(class和对象的绑定) //如上,运用class和一个对象的形式来解 ...
- jQuery中是事件绑定方式--on、bind、live、delegate
概述:jQuery是我们最常用的js库,对于事件的绑定也是有很多种,on.one.live.bind.delegate等等,接下来我们逐一来进行讲解. 本片文章中事件所带的为版本号,例:v1.7+为1 ...
- 理解Javascript中的事件绑定与事件委托
最近在深入实践js中,遇到了一些问题,比如我需要为动态创建的DOM元素绑定事件,那么普通的事件绑定就不行了,于是通过上网查资料了解到事件委托,因此想总结一下js中的事件绑定与事件委托. 事件绑定 ...
- 第二章 Vue快速入门--9 使用v-on指令定义Vue中的事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- jQuery中的事件绑定方法
在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...
随机推荐
- 田螺便利店—win10专业版激活码
win10专业版:VP4MG-CMX8Q-27THR-Y468R-HRVR7 开始——设置——更新和安全——激活——更改产品密钥 复制VP4MG-CMX8Q-27THR-Y468R-HRVR7即可激活 ...
- 结对第2次作业——WordCount进阶需求
作业题目链接 队友链接 Fork的同名仓库的Github项目地址 具体分工 玮哥负责命令参数判断.单词权重统计,我只负责词组词频统计(emmmm). PSP表格 预估耗时(分钟) 实际耗时(分钟) P ...
- acm 2001
格式化输出 //////////////////////////////////////////////////////////////////////////////// #include<i ...
- XML之命名空间的作用(xmlns)
http://www.w3school.com.cn/xml/xml_namespaces.asp http://blog.csdn.net/zhch152/article/details/81913 ...
- LeetCode - Top K Frequent Words
Given a non-empty list of words, return the k most frequent elements. Your answer should be sorted b ...
- python.numpy.std()计算矩阵标准差
>>> a = np.array([[1, 2], [3, 4]]) >>> np.std(a) # 计算全局标准差 1.1180339887498949 > ...
- Commons工具包的使用
使用步骤: 1.Java Project下新建Folder文件夹,命名lib 2.lib文件夹下把Commons-io-2.4jar包复制进去 3.右键Commons-io-2.4jar包,点击Bu ...
- day 31 进程的其他方法 进程锁 进程队列
一.进程的其他方法 1. .name 进程名 (可指定) 2. .pid 进程号 3. os.getpid 在什么位置就是什么的进程号 4. .is ...
- 判断两个IP是否处于同一子网(网段)
如何去判断A和B两个IP是否在同一网段,假如有如下两个IP地址和子网掩码,判断他们是否是同一个网段的IP地址的方法: A IP:202.194.128.9 B IP:202.194.128.14 子网 ...
- Exception analysis
Finding: Thread 119:1f7c Exception Code 0xE06D7363 From https://support.microsoft.com/en-us/help/185 ...