问题 即使鼠标静止,也会调用jQuery mousemove()


对我来说,如果我尝试这个例子: http://jsfiddle.net/bY3CC/3/ 即使我将鼠标移到文档上然后我让它静止,“鼠标移动”文本也会出现...

为什么? ; \

而且,似乎该消息只出现在Chrome中....

奇怪:-s


9840
2018-01-02 15:36


起源

可能与: stackoverflow.com/a/17819113/2464167 - argaz


答案:


全球 event 对象是非标准的,因此它只存在于某些浏览器中,例如IE(可能只在怪癖模式下)并且显然在Chrome中。

接受事件对象作为事件处理程序的参数:

var last_moved=0;
$(document).mousemove(function(e){
  var now = e.timeStamp;    
  if (now - last_moved > 1000) {
    $('#messages').append('mouse moved<br/>');
    last_moved = now;
  }
});

jsfiddle.net/bY3CC/5/


4
2018-01-02 15:43



好的,这解决了问题的一半。现在,如果鼠标仍然存在,为什么会出现消息? - Cristy
我目前没有安装Chrome,但我已经在Firefox 3,IE 9,Opera 11和Safari 4中对其进行了测试,并且当鼠标静止时它们不会触发事件。也许Chrome做了一些奇怪的事情,或者你有一些插件或可能导致这种情况的东西? - Guffa
它也发生在我的Chrome安装(9.0.597.19 beta)上。奇怪的是,打印当前鼠标像素位置显示它始终处于相同位置。 - AbdullahC
这很奇怪,重新启动Chrome后,它运行得很完美......这就是我在工作的任何方式:D bit.ly/hRpiqr - Cristy
@Guffa为什么当你点击文件时它也会显示消息?鼠标还在同一个位置? - msm.oliveira


存储x,y坐标

$(document).mousemove((function(){
    var x,y;

    return function(evt){
        if(evt.clientX == x && evt.clientY == y){
            return;
        }
        x = evt.clientX;
        y = evt.clientY;
        $('#messages').append('mouse moved<br/>');
    };
})());

11
2018-02-26 10:29