确定导致滚动事件触发的原因。

12

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

是否可能确定是什么导致了scroll事件的触发?是用户干预还是JS代码?

1个回答

7

我认为你无法确定是什么导致了滚动。滚动事件只表示窗口正在滚动,而不是滚动的原因。

但或许在调用你的代码中的window.scrollTo()之前,你可以暂停滚动事件监听器或设置一个标志。在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
    }
}

这不太美观,但应该可以工作


1
我最近使用了类似这样的东西,我可以保证,它实际上运作得非常好。我试图检测滚动事件是否来自正在缓动滚动中的用户。我使用了GreenSock的onUpdate()时间轴函数,并发现如果在该函数中设置一个标志,它会与滚动监听器很好地同步。然后你只需重置该标志。如果用户中断滚动,则不会设置该标志,因此您可以终止动画... - newshorts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接