0

我对James Padolsey 的自定义事件有疑问:scrollstartscrolltop

当我使用鼠标滚轮滚动一个“槽口”或单击滚动条时,它远低于或高于其当前位置,导致突然滚动大量,我得到相同的scrollTop()scrollstart-scrolltop我不知道在哪里滚动开始或滚动发生的方向。jsFiddle在此处可用(注意:如果您的分辨率非常高,则必须向 HTML 添加更多文本,以便在结果窗口中出现滚动条)。

HTML:

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

CSS:

#scrollable {width: 120px;}

JavaScript:

var before = 0;

$(window).bind('scrollstart', function() {
    before = $(window).scrollTop();
});

$(window).bind('scrollstop', function() {
    alert('before: ' + before + "\nafter: " + $(window).scrollTop())
});

jsFiddle 在这里可用

关于如何检索事件的真实scrollTop()价值的任何想法scrollstart?我想修改插件是一个选项,所以欢迎所有想法。

4

2 回答 2

1

我建议不要在滚动开始时记录before值,而是建议在另一个事件中这样做,例如 mousemove()

这个想法的jsFiddle工作

于 2012-03-19T09:07:00.723 回答
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 以在滚动时记录更大的变化)。

于 2012-03-24T05:48:30.347 回答