2010-04-10 19 views
6

Safari/Webkit'te mousemove olayının iki kez tetiklendiği sorunlar hakkında okudum, ancak karşılaştığım sorun, mousemove farenin olduğu zaman bile taşındı. Diğer bir deyişle, fare imleci, sayfa yüklendiğinde/yenilendiğinde olayın eklendiği bağlamın üzerine yerleştirildiğinde zaten tetiklenir. Ve ben onu document'a (tarayıcının tüm viewport'una) bağladığımdan, Safari'de hemen ateş ediyor. html öğeye, body ve sarıcıya div eklemeye çalıştım. Değişiklik yok.Fare hareket etse bile Webkit ve Safari yangın mousemove

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

Diğer tarayıcılarda işe yarar mı? Neyi yanlış yaptığımı gören var mı? Teşekkürler.

+0

Aynı problemim var. Cmd, ctrl alt, vardiya ve kapak kilidi de mousemove olayını (mac üzerinde safari 4) tetikler. Burada deneyin: http://www.quirksmode.org//js/events/mousemove.html –

cevap

1

Kirli bir kesik olduğunu biliyorum, ama en azından bu bir şey: sadece ikinci kez mousemove tetiklendiğinde geri arama işlevini yürütün.

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

Demo: Ne olursa olsun, Safari sayfa yüklendiğinde mousemove ateş yalnızca tarayıcı değil http://fiddle.jshell.net/Yz5Bd/show/light/

için - IE de yapar. Her neyse, diğer tarayıcıları kullanan kişiler "gecikme" farkına varamaz, çünkü farenizi yalnızca bir pikseli taşımak neredeyse imkansızdır.