2010-04-10 7 views
6

Ich habe über Probleme gelesen, bei denen das Ereignis mousemove zweimal in Safari/Webkit ausgelöst wird, aber das Problem ist, dass mousemove ausgelöst wird, selbst wenn die Maus ist nicht bewegt. Das heißt: Es wird bereits ausgelöst, wenn sich der Mauszeiger über dem Kontext befindet, an den das Ereignis angehängt ist, wenn die Seite geladen/aktualisiert wird. Und weil ich es an document anhefte (gesamtes Ansichtsfenster des Browsers), wird es sofort in Safari ausgelöst. Ich habe versucht, es an das html Element, an das body und an einen Wrapper div anzuschließen. Keine Änderung.Webkit und Safari fire mousemove, auch wenn sich die Maus nicht bewegt

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

Ist funktioniert in anderen Browsern ok. Wer sieht, was ich falsch mache? Vielen Dank.

+0

Ich habe das gleiche Problem. Cmd, Ctrl Alt, Shift und Caps Lock löst auch das mousemove Event aus (Safari 4 auf Mac). Probieren Sie es hier aus: http://www.quirksmode.org//js/events/mousemove.html –

Antwort

1

Ich weiß, es ist ein schmutziger Hack, aber zumindest ist das etwas: einfach die Callback-Funktion beim zweiten Mal mousemove wird ausgelöst.

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/

Für das, was es wert ist, Safari Brennen nicht der einzige Browser mousemove auf Seite Last - IE tut es auch. Auf jeden Fall werden Leute, die andere Browser benutzen, die "Verzögerung" nicht bemerken, da es praktisch unmöglich ist, die Maus nur um ein Pixel zu bewegen.