2010-04-10 12 views
6

Czytałem o problemach, w których zdarzenie mousemove jest uruchamiane dwa razy w Safari/Webkit, ale problem, który napotykam, polega na tym, że mousemove strzela nawet gdy mysz jest nie przeniesiono. To znaczy: jest on już uruchamiany, gdy kursor myszy znajduje się nad kontekstem, do którego dołączone jest wydarzenie, gdy strona jest ładowana/odświeżana. A ponieważ przyłączam go do document (cały widok przeglądarki), odpala od razu w Safari. Próbowałem dołączyć go do elementu html, do body i do opakowania div. Bez zmiany.Webkit i Safari uruchamiają mysz, nawet gdy mysz się nie porusza

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

Czy działa dobrze w innych przeglądarkach. Czy ktoś widzi, co robię źle? Dzięki.

+0

Mam ten sam problem. Cmd, ctrl alt, shift i caps lock uruchamiają także zdarzenie mousemove (safari 4 na Macu). Wypróbuj tutaj: http://www.quirksmode.org//js/events/mousemove.html –

Odpowiedz

1

Wiem, że to brudny hack, ale przynajmniej to jest coś: po prostu uruchom funkcję zwrotną po raz drugi mousemove jest zwolniony.

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

Demo: http://fiddle.jshell.net/Yz5Bd/show/light/

Na co warto, Safari nie jest jedyną przeglądarką wypalania mousemove na stronie obciążenia - IE robi to zbyt. W każdym razie osoby korzystające z innych przeglądarek nie zauważą opóźnienia, ponieważ przesunięcie myszy o jeden piksel jest praktycznie niemożliwe.

Powiązane problemy