window.addEventListener注册滚动scroll事件不生效

先了解一下滚动事件触发的条件

视图或者一个元素在滚动时,会触发元素的 scroll 事件。
备注: 在 iOS UIWebViews 中,滚动进行时不会触发 scroll 事件;只有当滚动结束后事件才会被触发。
只要某一个元素在滚动,就可以注册滚动事件。
ps:滚动事件不一定要注册的 window 上, 可以注册在document上,或者某一个具体的元素上。
滚动事件不一定要注册的 window 上, 可以注册在document上,或者某一个具体的元素上。

window.addEventListener('scroll', xxx方法) 不被触发的原因

今天在做项目的时候,需要做一个滚动的效果。
发现在
mounted(){    
  window.addEventListener('scroll', this.pageScroll) 
}
中注册的滚动事件没有生效。觉得真的很神奇。
我之所以觉得神奇,是因为之前是可以滚动触发的。

解决的办法

第1种: 添加上true
mounted(){    
  window.addEventListener('scroll', this.pageScroll,true) 
}

第2种:查看父级元素是否有overflow:scroll;overflow:auto; 将他们去除。
虽然去除是可以解决的。但是这不是影响滚动事件不被触发的原因。这个是一个表现

第3种:注册在document上
mounted(){    
  document.addEventListener('scroll', this.pageScroll,true) 
}

第4种:如果document上都不触发的话;
4.1 查看是否达到触发的条件。
4.2 注册在一个具体的元素上(这个元素要达到滚动的条件)

无法移除滚动事件

1. 因为事件是注册 document 上的。我移除的时候是 document 上移除的,发现不生效
我又在window 上移除了。结果生效了。神奇~!

尾声

我知道这肯定是哪里影响了。才会出现这些神奇的现象。
我本来想找到本质的原因。
但是后来花了很多时间,还是没有找到原因。就简单记录一下。
希望对小伙伴有用~ 
posted @ 2023-02-26 19:04  南风晚来晚相识  阅读(1287)  评论(0编辑  收藏  举报