Я хочу иметь возможность определять, когда мышь покидает окно, чтобы я мог остановить запуск событий, пока мышь пользователя находится в другом месте.
Есть идеи, как это сделать?
Я хочу иметь возможность определять, когда мышь покидает окно, чтобы я мог остановить запуск событий, пока мышь пользователя находится в другом месте.
Есть идеи, как это сделать?
Ответы:
Имейте в виду, что мой ответ сильно устарел.
Этот тип поведения обычно желателен при реализации поведения перетаскивания на html-странице. Приведенное ниже решение было протестировано в IE 8.0.6, FireFox 3.6.6, Opera 10.53 и Safari 4 на компьютере с MS Windows XP.
Сначала небольшая функция от Peter-Paul Koch; кроссбраузерный обработчик событий:
А затем используйте этот метод для присоединения обработчика событий к событию mouseout объектов документа:
Наконец, вот html-страница со встроенным скриптом для отладки:
источник
Если вы используете jQuery, то как насчет этого короткого и приятного кода -
Это событие будет срабатывать всякий раз, когда указатель мыши не находится на вашей странице, как вы хотите. Просто измените функцию на то, что хотите.
И вы также можете использовать:
Срабатывать, когда мышь снова возвращается на страницу.
Источник: https://stackoverflow.com/a/16029966/895724
источник
Это работает для меня:
источник
addEvent
?if (!evt.toElement && !evt.relatedTarget)
Чтобы обнаружить оставление мыши без учета полосы прокрутки и поля автозаполнения или проверьте:
Пояснения к условиям:
======================== РЕДАКТИРОВАТЬ ========================= ======
document.addEventListener ("mouseleave"), похоже, не запускается в новой версии Firefox, mouseleave необходимо прикрепить к такому элементу, как body, или дочернему элементу.
Я предлагаю вместо этого использовать
Или
источник
Использование события onMouseLeave предотвращает всплытие и позволяет легко определять, когда мышь покидает окно браузера.
http://www.w3schools.com/jsref/event_onmouseleave.asp
источник
document.onmouseleave = function() { alert('You left!') };
используйте не document.body, которое запускает полосы прокрутки, которые сжимают тело! Код для предотвращения возгорания элементов не требуется. Хорошее объяснение: developer.mozilla.org/en-US/docs/Web/API/Element/…Ни один из этих ответов не помог мне. Сейчас я использую:
Я использую это для виджета загрузки файлов методом перетаскивания. Это не совсем точно, срабатывает, когда мышь приближается к определенному расстоянию от края окна.
источник
Я пробовал все вышеперечисленное, но ничего не работает, как ожидалось. После небольшого исследования я обнаружил, что e.relatedTarget - это html непосредственно перед тем, как мышь покинет окно .
Итак ... В итоге я получил следующее:
Пожалуйста, дайте мне знать, если вы обнаружите какие-либо проблемы или улучшения!
Обновление 2019
(как выяснил user1084282)
источник
relatedTarget
имеет значение null, когда мышь покидает окно. Вдохновленный ответом @ user1084282, измените его на это:if(!e.relatedTarget && !e.toElement) { ... }
и он работаетif(!e.relatedTarget && !e.toElement)
вместо условия в фактическом ответе. Он обнаруживает, что мышь покидает тело документа.Я беру то, что сказал. Это возможно. Я написал этот код, работает отлично.
работает в chrome, firefox, opera. Не тестировался в IE, но предполагаю, что он работает.
редактировать. IE как всегда доставляет неприятности. Чтобы он работал в IE, замените события из окна на документ:
объедините их для обнаружения курсора в кроссбраузере o0: P
источник
примените этот css:
Это гарантирует, что элемент html займет всю высоту окна.
примените этот jquery:
Проблема с наведением указателя мыши и наведением указателя мыши заключается в том, что если вы наведете указатель мыши на дочерний элемент или выйдете из него, это вызовет событие. Функция, которую я дал , не активируется при наведении указателя мыши на дочерний элемент. Он срабатывает только при выходе / вхождении курсора мыши в окно
просто чтобы вы знали, что вы можете это сделать, когда пользователь наводит курсор мыши в окне:
источник
Я пробовал один за другим и нашел лучший ответ на тот момент:
https://stackoverflow.com/a/3187524/985399
Я не использую старые браузеры, поэтому сделал код короче для работы в современных браузерах (IE9 +)
Здесь вы видите поддержку браузера
Это было довольно коротко, я думал
Но проблема все еще оставалась, потому что «mouseout» срабатывает для всех элементов в документе .
Чтобы этого не произошло, используйте mouseleave (IE5.5 +). См. Хорошее объяснение по ссылке.
Следующий код работает без срабатывания по элементам внутри элемента, которые должны быть внутри или снаружи. Попробуйте также перетащить за пределы документа.
Вы можете установить событие для любого HTML-элемента. Однако не
document.body
включайте событие , потому что полоса прокрутки Windows может сжимать тело и срабатывать, когда указатель мыши находится над полосой прокрутки, когда вы хотите прокручивать, но не хотите запускать событие mouseLeave над ней.document
Вместо этого установите его , как в примере.источник
Может быть, если вы постоянно слушаете OnMouseOver в теге body, а затем обратный вызов, когда событие не происходит, но, как утверждает Зак, это может быть очень уродливым, потому что не все браузеры обрабатывают события одинаково, есть даже некоторые возможность того, что вы потеряете MouseOver, даже если окажетесь над div на той же странице.
источник
Может быть, это поможет некоторым из тех, кто придет сюда позже.
window.onblur
иdocument.mouseout
.window.onblur
срабатывает, когда:Ctrl+Tab
илиCmd+Tab
.Практически всегда, когда ТАКАЯ вкладка браузера теряет фокус.
document.mouseout
срабатывает, когда:Ctrl+Tab
илиCmd+Tab
.Практически в любом случае, когда ваш курсор покидает документ.
источник
window.onblur
тоже. +1Это может быть немного взломано, но срабатывает только тогда, когда мышь покидает окно. Я продолжал ловить дочерние события, и это решило проблему.
источник
источник
Это сработало для меня. Комбинация некоторых ответов здесь. И я включил код, показывающий модель, только один раз. И модель уходит, если щелкнуть где-нибудь еще.
источник
Смотрите
mouseover
иmouseout
.источник
Я не тестировал это, но моим инстинктом было бы выполнить вызов функции OnMouseOut для тега body.
источник
Это будет работать в хроме,
источник