2012-08-17 58 views
0

我试图找到一个解决方案来在整个窗口滚动条上捕获鼠标(滚动结束)事件。 但这个代码只适用于零星。任何帮助将不胜感激。使用jquery捕获窗口滚动条的MouseUp事件

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

回答

2

我认为这是你以后:

$(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

+0

不错的插件。但如果鼠标停止并且不滚动,它仍会触发。问题是捕获mouseup事件。在您希望在滚动后添加您自己的某种滚动效果的情况下,可能需要这样做,但只要用户“握住”滚动条,就不需要这种情况。 – commonpike 2013-04-08 14:56:25

0

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

你接近,你只需要做:

if (isMouseDown) // instead of !isMouseDown 
+0

它还没有工作,必须有另一种方式来做到这一点。当然,@ ews2001的解决方案看起来很优雅。 – nicmon 2012-08-17 20:32:03

+1

更新:似乎它是一个浏览器错误:http://bugs.jquery.com/ticket/8184 – nicmon 2012-08-17 20:38:57

+0

和链接在这里http://stackoverflow.com/questions/4145402/mouseup-bug-in-all-browsers-除了Firefox的 – commonpike 2013-04-08 15:00:52

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; 
     }); 
    }     
}); 

这不一定是完全真实的,但做的工作......