Javascript pageY проблема с браузером Microsoft Edge

Я хочу создать простую script, которая обнаружит, будет ли окно мыши для мыши отключено. Решение уже описано здесь с помощью события mouseout. Проблема с этим решением заключается в том, что он инициирует действие, если пользователь пойдет с помощью мыши на скроллер. Поэтому я добавил дополнительный, если условие e.pageY < jQuery(window).scrollTop() к этому коду:

addEvent(document, "mouseout", function(e) {
    e = e ? e : window.event;
    var from = e.relatedTarget || e.toElement;
    if ((!from || from.nodeName == "HTML") && e.pageY < jQuery(window).scrollTop()) {
        alert("left window");
    }
});

Он отлично работает во всех браузерах, за исключением Microsoft Edge. В Edge e.pageY не потребуется 0 или -1, -2... как в других браузерах, но это будет 50,34,... (зависит от того, как быстро вы перемещаете мышь).

Мне интересно, есть ли какое-либо простое решение этой проблемы.

Ответ 1

Попробуйте onmouseleave

document.body.onmouseleave = function(e) {
  alert("left window");
}

Очень хорошая поддержка браузера IE5. 5+
На основании этого ответа Сэми Бенчериф

Измените document.body на document если вы хотите, чтобы пожар при перетаскивании задерживался за пределами окна, пока не отпустит мышь. Я не знаю, почему это работает.

Первая ссылка объясняет, что mouseleave не запускается на всех элементах документа, как mouseout - так что mouseleave не нужен дополнительный код, чтобы предотвратить это.

Перейти к скроллеру и прокручивать без запуска. Нет необходимости в jQuery.scrollTop: Положение вертикальной прокрутки совпадает с количеством пикселей, которые скрыты от просмотра над прокручиваемой областью. Таким образом, вы не хотите запускать, когда страница прокручивается?

Это решение работает по всем краям документа, игнорируя, если страница прокручивается или имеет полосы прокрутки. Скажите мне, если вы хотите каких-либо изменений.

Ответ 2

Мышь находится вне тела документа, когда она находится над полосой прокрутки окна.

Измените document.body на document. Тогда граница, где происходят события, находится на window.document а не на window.document.body где полоса прокрутки windows может уменьшить его.

Также вы можете попробовать onmouseleave

document.onmouseleave = function(e) {
  alert("left window");
}

Он срабатывает при отпускании мыши или за пределами окна.

Очень хорошая поддержка браузера IE5. 5+
На основании этого ответа Сэми Бенчериф

Первая ссылка выше объясняет, что mouseleave запускается не для всех элементов документа, как для события mouseout - поэтому mouseleave не требуется дополнительный код, чтобы предотвратить это.

var x = 0

document.onmouseleave = function(e) {
  console.log(x++);
}