Webkit и Safari запускают движение мыши, даже когда мышь не двигается - PullRequest
6 голосов
/ 10 апреля 2010

Я читал о проблемах, когда событие mousemove запускается дважды в Safari / Webkit, но проблема, с которой я сталкиваюсь, заключается в том, что mousemove срабатывает, даже когда мышь не перемещена. То есть: он уже срабатывает, когда курсор мыши находится над контекстом, к которому прикреплено событие, когда страница загружается / обновляется. И поскольку я присоединяю его к document (весь видовой экран браузера), он запускается сразу в Safari. Я пытался прикрепить его к элементу html, к body и к оболочке div. Без изменений.

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

Работает ли нормально в других браузерах. Кто-нибудь видит, что я делаю не так? Спасибо.

1 Ответ

1 голос
/ 22 апреля 2010

Я знаю, что это грязный хак, но, по крайней мере, это нечто: просто выполните функцию обратного вызова при втором срабатывании mousemove.

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

Демо: http://fiddle.jshell.net/Yz5Bd/show/light/

Несмотря на это, Safari - не единственный браузер, запускающий mousemove при загрузке страницы - IE тоже это делает. В любом случае, люди, использующие другие браузеры, не заметят «задержки», поскольку практически невозможно двигать мышью только один пиксель.

...