14

我正在寻找一小段 javascript 来检查鼠标移动,如果它确实执行一个函数。我希望在没有 jquery的情况下执行此操作,并且最好与大多数现代浏览器兼容。我有这个小脚本可以检测鼠标何时不移动:

<script>
document.onmousemove = (function() {
  var onmousestop = function() {
    /* do stuff */
  }, thread;

  return function() {
    clearTimeout(thread);
    thread = setTimeout(onmousestop, 500);
  };
})();
</script>

我希望在加载脚本后第一次移动鼠标时可以将事情编辑为触发执行操作?有什么帮助吗?谢谢

4

2 回答 2

15

Amit 解决方案的问题在于它删除了任何现有的 mousemove 侦听器。此外,第一次移动鼠标时它不会清理,因此会产生不必要的开销。

这是这样做的干净方式:

var myListener = function () {
    document.removeEventListener('mousemove', myListener, false);
    // do stuff
};

document.addEventListener('mousemove', myListener, false);

在行动中看到它:http: //jsfiddle.net/JQBmA/

如果您需要支持较旧的 IE,可以使用以下命令:

var addListener, removeListener;
if (document.addEventListener) {
    addListener = function (el, evt, f) { return el.addEventListener(evt, f, false); };
    removeListener = function (el, evt, f) { return el.removeEventListener(evt, f, false); };
} else {
    addListener = function (el, evt, f) { return el.attachEvent('on' + evt, f); };
    removeListener = function (el, evt, f) { return el.detachEvent('on' + evt, f); };
}

var myListener = function () {
    removeListener(document, 'mousemove', myListener);
    // do stuff
};

addListener(document, 'mousemove', myListener);
于 2012-11-03T09:53:21.173 回答
2
(function(){
   var moved = false
   window.onmousemove = function(e){
      if(!moved){
          moved = true;
          // do what you want after mousemove, here
      }
   }
})()
于 2012-11-03T05:08:44.820 回答