我有一个问题,设置overflow-x:隐藏在html和body元素上是阻止jquery滚动事件触发。
CSS:
html, body {
overflow-x: hidden;
}
JS:
$(function(){
$(window).on("scroll", function(e){
console.log("scrolling");
});
});
http://jsfiddle.net/r7Fqq/6/
亲自尝试一下:
注释掉overflow-x:hidden并弹出你的控制台。当您在html框中向上和向下滚动时,您应该看到“滚动”。将其注释回来并且滚动事件是静默的。
有谁知道为什么会这样?我知道当你将overflow设置为hidden时它会禁用滚动,但它只应该为你正在设置的轴执行此操作(仅在这种情况下为x)。在此先感谢您的帮助。
有同样的问题。
解决方法是从html元素中删除overflow-x:hidden,并将其仅保留在body元素上,它应该可以工作。
$(function() {
$(window).bind('mousewheel', function(event, delta) {
console.log("mousewheel");
return false;
});
});
我也发现了这种情况。当我们添加:
body {
overflow-x: hidden;
}
所有 window.addEventListener('scroll')
事件停止触发。我相信这是因为滚动事件没有移动到 document.body
。当我将eventListener更改为 document.body.addEventListener('scroll')
事情又开始了。有趣的是我的event.bubbles布尔值是假的。从我读到的内容,滚动事件应该冒泡到窗口。
解
更改
window.addEventListener('scroll', () => console.log('MEOW'))
至
document.body.addEventListener('scroll', () => console.log('MEOW'))
组 body {height: 100%;}
在css。它会工作的。您可能希望在div上应用overflow属性而不是整个body,然后相应地更改JS代码。在body上设置overflow属性会消除其滚动功能。另一个解决方案是使用Jquery wheel事件,如本文所述 - (https://stackoverflow.com/a/8378946/5348972)。