确定导致滚动事件启动的原因

rit*_*mas 7 javascript javascript-events

众所周知,scroll事件可以通过使用鼠标滚轮,单击滚动条箭头或动态地使用window.scrollTo(left, top)函数来启动.

是否有可能确定导致scroll事件发生的原因?无论是用户干预还是JS代码?

Fla*_*ino 5

我不认为你可以确定导致滚动的原因.滚动事件仅指示窗口正在滚动,而不是滚动的原因.

但也许您在window.scrollTo()从代码调用之前挂起scroll事件侦听器或设置标志.在Safari中,如果你使用scrollTo(),滚动事件只会触发一次,无论你滚动多少,所以你可以想象这样做:

// somewhere in your code...
isCodedScrollEvent = true;
window.scrollTo(0, 200);

// elsewhere in your code...
function scrollListener(event) {
    if( isCodedScrollEvent ) {
         // event was caused by code, so handle it differently
         // and then flip the flag back to false, so the next
         // will be handled normally again
         isCodedScrollEvent = false;
    } else {
         // event was caused by user
    }
}
Run Code Online (Sandbox Code Playgroud)

它不漂亮,但它应该工作