Webkit和Safari在鼠标未移动时也会触发mousemove事件

6
我已经阅读了关于Safari/Webkit中mousemove事件被触发两次的问题,但我面临的问题是,即使鼠标没有移动,mousemove也会被触发。也就是说,在页面加载/刷新时,当鼠标光标位于事件所附加到的上下文之上时,它已经被触发了。由于我将其附加到document(浏览器的整个视口),因此在Safari中立即触发。我尝试将其附加到html元素、body和包装器div,但没有变化。
$(document).bind('mousemove', function() {
  alert('Mouse moved!');
  $(document).unbind('mousemove');
});

其他浏览器是否正常工作。有没有人看到我做错了什么?谢谢。


我有同样的问题。在Mac上,Cmd、Ctrl、Alt、Shift和Caps Lock键也会触发mousemove事件(Safari 4)。在这里尝试一下:http://www.quirksmode.org//js/events/mousemove.html - Fred Bergman
1个回答

1

我知道这是一个不太正规的方法,但至少也是个办法:在第二次触发mousemove事件时简单地执行回调函数。

var $document = $(document), i = 0;
$document.bind('mousemove', function() {
 if (++i > 1) {
  alert('Mouse moved!');
  $document.unbind('mousemove');
 };
});

演示:http://fiddle.jshell.net/Yz5Bd/show/light/ 就此而言,Safari并不是唯一在页面加载时触发mousemove事件的浏览器 - IE也会这样做。无论如何,使用其他浏览器的人们不会注意到“延迟”,因为几乎不可能只移动鼠标一个像素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接