【发布时间】:2011-08-13 17:36:30
【问题描述】:
我有一个小“浮动工具箱”——一个带有position:fixed; overflow:auto 的 div。
效果很好。
但是当在该框内滚动(使用鼠标滚轮)并到达底部或顶部时,父元素“接管”“滚动请求”:工具框后面的文档滚动。
- 这很烦人,而不是用户“要求的”。
我正在使用 jQuery,并认为我可以使用 event.stoppropagation() 来阻止这种行为:$("#toolBox").scroll( function(event){ event.stoppropagation() });
它确实进入了函数,但传播仍然发生(文档滚动)
- 在 SO(和 Google)上搜索这个主题非常困难,所以我不得不问:
如何防止滚动事件的传播/冒泡?
编辑:
感谢 amustill 的工作解决方案(以及此处的鼠标滚轮插件的 Brandon Aaron:
https://github.com/brandonaaron/jquery-mousewheel/raw/master/jquery.mousewheel.js
$(".ToolPage").bind('mousewheel', function(e, d)
var t = $(this);
if (d > 0 && t.scrollTop() === 0) {
e.preventDefault();
}
else {
if (d < 0 && (t.scrollTop() == t.get(0).scrollHeight - t.innerHeight())) {
e.preventDefault();
}
}
});
【问题讨论】:
-
@Musaul - 实际上该线程提供了 2 种可能的解决方案(如果有点胭脂的话):在文档上设置
overflow:hidden,当鼠标悬停在工具箱中时,或者保存文档 scrollTop,并强制它在在 toolbox.scroll() 期间重复记录(很好)... -
是的,我的意思是滚动事件冒泡。但我想它会给你解决方法。我会完全避免滚动强制选项。在滚动事件中做太多(或复杂页面中的任何事情)会使浏览器冻结一段时间,尤其是在速度较慢的计算机上。
-
当附加到 body 标签时,这在 IE 以外的所有东西中都能很好地工作。通过上述修复,似乎完全禁用了鼠标滚轮滚动。
-
请看我的回答,@Matthew。它解决了 IE 问题,以及在没有任何插件的情况下对 FireFox 进行规范化。
标签: javascript jquery scroll event-bubbling event-propagation