2010-04-10 24 views
6

Tôi đã đọc về các sự cố khi sự kiện mousemove được kích hoạt hai lần trong Safari/Webkit, nhưng sự cố tôi đang gặp phải là mousemove cháy ngay cả khi chuột là không di chuyển. Đó là: nó đã được kích hoạt khi con trỏ chuột được đặt ở trên bối cảnh sự kiện được gắn vào khi trang được tải/làm mới. Và bởi vì tôi đính kèm nó vào document (toàn bộ khung nhìn của trình duyệt), nó sẽ kích hoạt ngay trong Safari. Tôi đã cố gắng đính kèm nó vào phần tử html, đến body và đến một trình bao bọc div. Không thay đổi.Webkit và Safari mousemove fire ngay cả khi chuột không di chuyển

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

Tính năng này có hoạt động tốt trong các trình duyệt khác không. Bất cứ ai nhìn thấy những gì tôi đang làm sai? Cảm ơn.

+0

Tôi gặp vấn đề tương tự. Cmd, ctrl alt, shift và caps lock cũng kích hoạt sự kiện mousemove (safari 4 trên mac). Hãy dùng thử tại đây: http://www.quirksmode.org//js/events/mousemove.html –

Trả lời

1

Tôi biết đó là một hack bẩn, nhưng ít nhất đây là một cái gì đó: chỉ cần thực hiện chức năng gọi lại lần thứ hai mousemove được kích hoạt.

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/

Đối với những gì nó có giá trị, Safari không phải là trình duyệt duy nhất bắn mousemove trên tải trang - IE làm nó quá. Nhưng dù sao, những người sử dụng các trình duyệt khác sẽ không nhận thấy "chậm trễ", vì hầu như không thể di chuyển chuột của bạn chỉ một pixel.

Các vấn đề liên quan