2010-04-10 5 views
6

J'ai lu des informations sur des problèmes où l'événement mousemove est déclenché deux fois dans Safari/Webkit, mais le problème auquel je suis confronté est que mousemove déclenche même lorsque la souris est pas déplacé. C'est-à-dire: il se déclenche déjà lorsque le curseur de la souris est positionné au-dessus du contexte auquel l'événement est attaché lorsque la page est chargée/rafraîchie. Et parce que je l'attache à document (vue entière du navigateur), il se déclenche immédiatement dans Safari. J'ai essayé de l'attacher à l'élément html, au body et à un wrapper div. Pas de changement.Webkit et Safari fire mousemove même lorsque la souris ne bouge pas

$(document).bind('mousemove', function() { 
    alert('Mouse moved!'); 
    $(document).unbind('mousemove'); 
}); 

Cela fonctionne bien dans d'autres navigateurs. Quelqu'un voit ce que je fais mal? Merci.

+0

J'ai le même problème. Cmd, ctrl alt, shift et caps lock déclenchent aussi l'événement mousemove (safari 4 sur mac). Essayez-le ici: http://www.quirksmode.org//js/events/mousemove.html –

Répondre

1

Je sais que c'est un hack sale, mais au moins c'est quelque chose: il suffit d'exécuter la fonction de rappel la deuxième fois mousemove est tiré.

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

Démo: http://fiddle.jshell.net/Yz5Bd/show/light/

Pour ce que ça vaut la peine, Safari n'est pas le seul navigateur tir mousemove à la page charge - IE ne aussi. De toute façon, les personnes utilisant d'autres navigateurs ne remarqueront pas le 'délai', puisqu'il est pratiquement impossible de déplacer votre souris d'un seul pixel.

Questions connexes