событие jquery / IE mousemove, запускаемое при исчезновении всплывающей подсказки, но мышь не движется

#jquery #internet-explorer-8 #tooltip #fadeout #mousemove

#jquery #internet-explorer-8 #всплывающая подсказка #исчезновение #перемещение мыши

Вопрос:

Я пытаюсь заставить всплывающую подсказку работать так, чтобы она исчезала после ее отображения. Мой код отлично работает, за исключением IE8 — событие mousemove (над изображением) продолжает запускаться при исчезновении всплывающей подсказки, и это создает пульсирующий эффект … постепенное включение / выключение.

Проблема как-то связана со всплывающей подсказкой, потому что, если я избавлюсь от кода всплывающей подсказки, событие перемещения мыши вызывается только при перемещении мыши.

Упрощенный пример можно увидеть здесь:

щелкните, чтобы увидеть упрощенный пример (используйте IE8)

Комментарии:

1. Кто-нибудь еще может воспроизвести это? Кажется, я не могу перевести это в proc.

2. Нет. Не удалось повторить это в ie9 (режим ie8). Сработало, как ожидалось

3. Вы используете jQuery 1.5.2 — попробуйте обновить до 1.6.2, поскольку это вполне могло быть исправлено в исходном коде.

4. Ради гуглера: по какой-то причине я также получаю эти ложные события перемещения мыши в IE при анимации непрозрачности div с помощью jquery, полностью отдельно от мыши, которая находится над совершенно другим div. Сохранение координат мыши, чтобы увидеть, действительно ли она перемещена, как показано ниже, сделало свое дело.

Ответ №1:

Да, моя идея по исправлению, похоже, работает:

 ElementLooper.prototype = {
init: function(items, control, outer){
...
var self = this;
...
this.px = null;
this.py = null;
...
outer.mousemove(function(e) {
                  if (self.px == e.pageX amp;amp; self.py == e.pageY) {
                    return;
                  }
                  self.px = e.pageX;  self.py = e.pageY;
                  self.show_control();
                });
  

Комментарии:

1. Я вижу… итак, вы сохраняете текущее положение мыши в событии перемещения мыши как глобальные значения, а затем проверяете, изменилось ли положение, прежде чем что-либо делать? Интересно. Интересно, известна ли эта ошибка и нужно ли сообщать о ней.

Ответ №2:

Да, я могу воспроизвести это в IE7 и IE8, jquery-1.6.2

Я написал слайд-шоу с изображениями, которое использует fadeIn () / fadeOut () для переключения между изображениями. Если курсор мыши находится над слайд-шоу, всплывающая подсказка img title =»…» появляется при переключении изображения. Когда всплывающая подсказка исчезает (браузер удаляет ее через несколько секунд), вызывается обработчик mousemove().

Смотрите первую страницу http://davidhoulder.com для примера, который в настоящее время (24 июля 2011) вызывает эту ошибку в IE7 / 8. Если мне удастся исправить или обойти это, я обновлю этот ответ.

Одно из возможных исправлений — сохранить .pageX и .pageY в обработчике .mousemove () и просто вернуть, если мышь действительно не перемещалась.