您可以使用以下方法检测任意元素上的浏览器滚动事件:
element.addEventListener('scroll', function (event) {
// do something
});
我希望能够区分垂直滚动和水平滚动并独立执行它们的操作。
我目前通过存储 element.scrollTop 和 element.scrollLeft 的值,然后在事件侦听器中比较它们来执行此操作。例如
var scrollLeft, scrollTop;
element.addEventListener('scroll', function (event) {
if (scrollLeft !== element.scrollLeft) {
// horizontally scrolled
scrollLeft = element.scrollLeft;
}
if (scrollTop !== element.scrollTop) {
// vertically scrolled
scrollTop = element.scrollTop;
}
});
这工作正常,但是从 https://gist.github.com/paulirish/5d52fb081b3570c81e3a 我读到读取 scrollLeft 或 scrollTop 值会导致回流。
有没有更好的方法来做到这一点而不会导致浏览器在滚动时重排?
原文由 magritte 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为你的代码是正确的,因为在一天结束时你需要阅读其中一个属性来找出滚动方向,但这里避免性能问题的 关键 是 限制事件,否则
scroll
事件触发太频繁,这是性能问题的根本原因。因此,您的示例代码适用于限制
scroll
事件,如下所示:来源: https ://developer.mozilla.org/en-US/docs/Web/Events/scroll#Example