【问题标题】:Determine what caused scroll event to fire up确定导致滚动事件触发的原因
【发布时间】:2011-08-09 11:11:03
【问题描述】:

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

是否可以确定导致scroll 事件触发的原因?是用户干预还是JS代码?

【问题讨论】:

    标签: javascript javascript-events


    【解决方案1】:

    我认为您无法确定导致滚动的原因。滚动事件仅表明窗口正在滚动,而不是为什么它正在滚动。

    但也许您在从您的代码调用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
        }
    }
    

    它不漂亮,但它应该可以工作

    【讨论】:

    • 最近用过这样的东西,我可以保证,它实际上工作得很好。我试图检测滚动事件何时来自用户在调整滚动中间。我正在使用 greensock 的 onUpdate() 时间线函数,发现如果我在该函数中设置一个标志,它会与滚动监听器配合得很好。然后你只需重置标志。如果用户中断滚动,则不会设置标志,您可以终止动画...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多