如何检测 onscroll 事件是否以编程方式生成?

mik*_*ike 6 html javascript

我希望每当用户滚动时都会触发一个处理程序,但我不希望当浏览器代表用户滚动时发生这种情况。例如,下面的文档作为 onload 的一部分自行滚动。这会触发我的滚动处理程序,但我不希望它这样做。即使我删除了 onload,仍然存在一个问题:如果用户滚动然后重新加载页面,则处理程序会在重新加载时触发。再说一遍,我不想这样。

处理程序可以检测到是谁导致它被解雇吗?

<html>
 <body onscroll="alert('scroll detected')"
       onload="window.scrollBy(0, document.height)">
  aaa<br/>bbb<br/>ccc<br/>ddd<br/>eee<br/>fff<br/>ggg<br/>hhh<br/>iii<br/>
  jjj<br/>kkk<br/>lll<br/>mmm<br/>nnn<br/>ooo<br/>ppp<br/>qqq<br/>rrr<br/>
  sss<br/>ttt<br/>uuu<br/>vvv<br/>www<br/>xxx<br/>yyy<br/>zzz
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

DMC*_*MCS 0

如何在事件onscroll期间添加事件document.onReady,而不是内联在正文命令上?我认为这应该允许浏览器滚动到添加事件之前的位置onScroll

另一种选择是添加一个setTimeout()调用函数,onscroll以在文档完全渲染后几百毫秒添加事件。