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 回答