【发布时间】:2011-10-25 12:57:57
【问题描述】:
是否可以判断滚动事件是由浏览器完成的还是由用户完成的?具体来说,当使用后退按钮时,浏览器可能会跳转到最后一个已知的滚动位置。如果我绑定到滚动事件,如何判断这是由用户还是浏览器引起的?
$(document).scroll( function(){
//who did this?!
});
我看到三种导致浏览器滚动的情况。
- 用户执行了一些操作。例如,使用鼠标滚轮、箭头键、向上/向下翻页键、主页/结束键、单击滚动条或拖动其拇指。
- 浏览器自动滚动。例如,在浏览器中使用后退按钮时,它会自动跳转到最后一个已知的滚动位置。
- Javascript 滚动。例如,
element.scrollTo(x,y)。
【问题讨论】:
-
我不确定你的问题,如果你认为使用后退按钮跳转到我是浏览器或用户的滚动事件。一般来说:您认为“通过浏览器滚动”是什么?如果您的意思是由脚本启动滚动,那么您需要做的就是在脚本滚动时停用事件处理程序或设置一个标志,以便事件处理程序知道忽略它。
-
我认为通过后退按钮滚动是一种“浏览器滚动”。其他任何东西——鼠标滚轮、上/下箭头、中心按钮点击等都是用户滚动。我想我真正的问题可能是 - 有没有办法区分事件的来源?我确实查看了事件对象的属性,但找不到任何东西。我可以想象的三种场景是浏览器启动滚动、javascript启动滚动和用户启动滚动。希望这能让事情更清楚。
-
@mrtsherman 我发现了其中一些,同时实现了相同的输出:stackoverflow.com/questions/2834667/…
标签: javascript jquery