2015-05-15 181 views
1

我需要通过拖动我的网站滚动条来检测鼠标移动,这可以让我检测用户的不活动状态。当我用鼠标拖动滚动条时不会触发鼠标移动事件

正在拖动滚动条时,鼠标移动事件不会触发。

不工作在IE11和Chrome浏览器,我看到Firefox 32中的mousemove事件触发,我还没有测试过其他浏览器。

示例代码:

HTML

<div class="parent" style="background-color:black;width:100px;height:500px;overflow:scroll;"> 
    <div class="child" style="background-color:blue;width:100px;height:1000px"></div> 
</div> 

的Javascript:

var lastMove; 
$(window).mousemove(function (e) { 
    lastMove = new Date(); 
    $(".child").css("background-color", "red"); 

    lastTimeMouseMoved = new Date().getTime(); 
     var t=setTimeout(function(){ 
      var currentTime = new Date().getTime(); 
      if(currentTime - lastTimeMouseMoved > 10){ 
       $(".child").css("background-color", "blue"); 
      } 
     },10); 
}); 

JS小提琴: https://jsfiddle.net/btdxha8k/

绑定到滚动事件的解决方案,我现在有,但我想知道是否有更多的c精益解决方案,因为我需要绑定到100多个不需要滚动事件的div,因为这看起来非常冗余,肮脏,我通常不喜欢在我的代码中使用像这样的黑客。

干杯;)

+0

我看不到任何理由你不能删除'onscroll'处理程序自动移动开始时的滚动条,以及当自动移动停止时重新应用onscroll处理程序。您不能触发未附加的事件。因此,事件触发您的处理程序的唯一时间是用户启动滚动时。 – enhzflep

+0

是的,你只能了解客户端区域的鼠标事件。滚动条不是窗口客户区的一部分。 – enhzflep

+0

我看到Firefox 32中的mousemove事件触发, – Xela

回答

1

我猜想,鼠标事件不会引发,因为滚动条在技术上是你的页面之外。

相反,你可以听onscroll事件吗?只有当你在屏幕内移动鼠标

https://api.jquery.com/scroll/

2

鼠标移动事件被触发。 你的问题在这里滚动不是屏幕的内侧捕捉鼠标移动事件,所以你可以添加具有相同功能的滚动事件

+0

@Xela我不认为在现代这将会造成如此巨大的性能问题,只是一个滚动事件 – nikoss

+0

是啊我的意思是它有点多余的绑定鼠标移动事件溢出的元素,不需要它们我喜欢让我的代码看起来很漂亮对于需要维护它的任何其他人来说都不那么令人困惑 – Xela

+0

@Xela如果要谈论性能,我首先建议你摆脱jquery有更简单的纯js函数,用于许多jQuery替代品,您可以使用它们而不用jquerys填充ram变量 – nikoss