0

James Padolsey のカスタム イベントに問題がありscrollstartます。scrolltop

マウス ホイールを使用して 1 つの「ノッチ」をスクロールするか、スクロール バーを現在の位置のはるか下または上のどこかでクリックすると、突然大量にスクロールしscrollTop()ます。スクロールが開始された、またはスクロールが行われた方向。jsFiddleはこちらから入手できます(注: 解像度が非常に高い場合は、結果ウィンドウにスクロール バーが表示されるように HTML にテキストを追加する必要があります)。scrollstartscrolltop

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 に答える