jQuery scrollstart,scrollstop和非常快速的滚动问题

时间:2012-03-16 15:22:24

标签: scroll jquery custom-events

我遇到James Padolsey's custom events问题:scrollstartscrolltop

当我使用鼠标滚轮滚动一个“缺口”或者我点击远离其当前位置或高于其当前位置的滚动条时,会导致大量突然滚动,我得到scrollTop()的{​​{1}}值{ {1}}和scrollstart - 我无法分辨滚动的位置或滚动的方向。 jsFiddle available here(注意:如果您的分辨率非常高,则必须在HTML中添加更多文本,以便在结果窗口中显示滚动条)。

HTML:

scrolltop

CSS:

<html>
    <body>
        <div id="scrollable">
            <!-- insert lots of text here -->
        </div>
    </body>
</html>

JavaScript的:

#scrollable {width: 120px;}

jsFiddle available here

有关如何检索var before = 0; $(window).bind('scrollstart', function() { before = $(window).scrollTop(); }); $(window).bind('scrollstop', function() { alert('before: ' + before + "\nafter: " + $(window).scrollTop()) }); 事件的真scrollTop()值的任何想法?我想是修改插件是一个选项,所以欢迎所有想法。

2 个答案:

答案 0 :(得分:1)

我不建议在滚动开始时记录before值,而是建议在另一个事件中执行此操作,例如mousemove()

jsFiddle of this idea working

答案 1 :(得分:0)

也许我误解了你的问题(我没有使用过该插件),但我认为你不需要使用该插件的每一部分。如果您只想知道ScrollTop的前一个和当前值及其方向,请看一下:

http://jsfiddle.net/C3ye7/

var currentScrollTop, temporalScroll = 0;
$(window).scroll(function(){
    currentScrollTop = $(this).scrollTop();
    console.log('Previous value: ' + temporalScroll)
    if (currentScrollTop > temporalScroll) {
        console.log('scroll down')
        console.log('Current value: ' + currentScrollTop)
    }
    else { 
        console.log('scroll up');
        console.log('Current value: ' + currentScrollTop)
    }
    temporalScroll = currentScrollTop;

});

为了添加计时功能,您只能使用该插件的那一部分(或者简单地说,在滚动时启动setTimeout以记录更大的更改)。