Javascript 不使用JQuery检测鼠标移动

Javascript 不使用JQuery检测鼠标移动,javascript,mouse,Javascript,Mouse,我正在寻找一小段javascript,它将检查鼠标移动,并在事件中执行一个函数。我希望在不使用jquery的情况下实现这一点,并且最好与大多数现代浏览器兼容。我有一个小脚本,可以检测鼠标何时不动: <script> document.onmousemove = (function() { var onmousestop = function() { /* do stuff */ }, thread; return function() { clearTi

我正在寻找一小段javascript,它将检查鼠标移动,并在事件中执行一个函数。我希望在不使用jquery的情况下实现这一点,并且最好与大多数现代浏览器兼容。我有一个小脚本,可以检测鼠标何时不动:

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

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

document.onmousemove=(函数(){
var onmousestop=函数(){
/*做事*/
},螺纹;
返回函数(){
clearTimeout(线程);
线程=设置超时(onmousestop,500);
};
})();
我希望在加载脚本后第一次移动鼠标时,可以将内容编辑为触发do?有什么帮助吗?谢谢

问题是它会删除任何现有的mousemove侦听器。而且,当鼠标第一次移动时,它不会清理,因此会产生不必要的开销

(function(){
   var moved = false
   window.onmousemove = function(e){
      if(!moved){
          moved = true;
          // do what you want after mousemove, here
      }
   }
})()
这是一种干净的方法:

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

document.addEventListener('mousemove', myListener, false);
在行动中看到它:


如果需要支持较旧的IEs,可以使用:

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

谢谢,效果很好。IE需要注意的一点是,onmousemove在应用于窗口对象时不起作用,因此请改用document.onmousemove!这种样式不好,因为您正在杀死其他“mousemove”事件处理程序。最好附加一个事件处理程序。“如果你需要支持较旧的IE…”-我希望不是这样:(我讨厌IE那么坏,哪个版本的IE需要后者,你知道吗?