событие mouseleave для документа с учетом ошибки Chrome - PullRequest
0 голосов
/ 31 августа 2018

Мне нужно безопасно определять, когда мышь покидает окно. У меня включен JQuery, поэтому обычно это будет хорошо:

$(document).on("mouseleave", function(event) {
  doSomething();
});

Однако в Chrome есть серьезная ошибка , в которой эта функция mouseleave запускается случайным образом при нажатии на элемент.

Как правило, это легко обойти:

$("#some-id").on("mouseleave", function(event) {
  var e        = event.originalEvent;
  if (!e.relatedTarget || !e.toElement) {
    // BUG in Chrome
    return;
  }
  doSomething();
}

Однако , это не работает для document или для любого элемента, когда мышь покидает окно, поскольку в этом случае e.relatedTarget и e.toElement равны нулю точно например, когда ошибка возникает . Поэтому я пытаюсь придумать что-то, что сможет безопасно определить, когда Chrome работает, и когда событие mouseleave действительно должно сработать.

Обновление: только что попробовал подход с mouseout вместо. Та же ошибка Chrome влияет и на это событие, так что ничего хорошего. : /

1 Ответ

0 голосов
/ 01 сентября 2018

Пока что это решение, которое я придумал. Надеемся, что когда-нибудь эта серьезная ошибка в Chrome получит достаточно внимания, чтобы исправить ее.

В случае, если mouseleave является ошибкой, обычно это происходит почти сразу после события mouseenter. Поэтому я просто подождал 1/10 секунды после события отпускания мыши, чтобы убедиться, что это не случайность Chrome.

var documentMouseLeaveTimeout = null;
$(document).on("mouseleave", function() {
  documentMouseLeaveTimeout = setTimeout(function() {
    doSomething();
  }, 100);
});

$(document).on("mouseenter", function() {
  clearTimeout(documentMouseLeaveTimeout);
});

Все еще надеюсь, что есть лучший ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...