0

ウィンドウ全体のスクロールバーでマウスアップ (スクロール終了) イベントをキャプチャするソリューションを見つけようとしています。しかし、このコードは散発的にしか機能しません。どんな助けでも大歓迎です。

<script type="text/javascript">
    $(function() {
        var scrollTimer;
        var isMouseDown = false;

        $(window)
            .mousedown(function(event) {
                clearTimeout(scrollTimer);
                isMouseDown = true;
            })
            .mouseup(function(event) {
                isMouseDown = false;
            })
            .scroll(function (event) {
                clearTimeout(scrollTimer);
                scrollTimer = setTimeout(function() {
                    if (! isMouseDown) {
                        console.log('UP');
                    }
                }, 500);
            });
    });
</script>
4

3 に答える 3

1

これがあなたが求めているものだと思います:

$(document).bind("scrollstop", function() {
   alert("Scrolling has stopped");
});

$(document).bind("scrollstart", function() {
  alert("Scrolling started");
});

私が使用したjqueryライブラリへのリンクは次のとおりです。

http://james.padolsey.com/demos/scrollevents/scroll-startstop.events.jquery.js

于 2012-08-17T17:29:58.737 に答える
0

http://jsfiddle.net/kyyn8/5/

あなたは近くにいました、あなたはただする必要がありました:

if (isMouseDown) // instead of !isMouseDown
于 2012-08-17T17:30:36.273 に答える
0

私がテストしたブラウザは、スクロールバーを離れるとすぐに mouseenter イベントを受け取るので、スクロールするときに mouseenter を一度だけ mouseup イベントに関連付けました。このようなもの:

$(window).on('mousedown.ss',function(ev) { 
    $.ssMouseDown=true;
});
$(window).on('mouseup.ss',function(ev) { 
    $.ssMouseDown=false;
});
$(window).on('scroll.ss',function(ev) { 
    if ($.ssMouseDown) {
        $(window).off('mouseenter.ss');
        $(window).one('mouseenter.ss',function(ev) { 
            $.ssMouseDown=false;
        });
    }                   
});

これは必ずしも完全に真実ではありませんが、仕事をしました...

于 2013-04-08T16:10:38.730 に答える