Мне нужен код Javascript для запуска, когда мышь покидает окно браузера. Мне нужно только поддерживать Safari (WebKit.)
Я попытался поместить обработчик mouseout в окно. Этот обработчик надежно вызывается, когда мышь покидает окно браузера. Но из-за барботажа это также вызывается, когда мышь перемещается между элементами документа. Я не могу понять, как определить, когда мышь фактически покинула окно и когда оно только перемещалось между элементами.
Когда мышь покидает окно, генерируется ровно одно событие, и элемент-мишень представляется элементом, над которым мышь фактически закончилась. Поэтому проверьте, не работает ли целевой элемент в окне или документе. И обертывание всей страницы в невидимое содержащее div тоже не работает: если div невидим, то мышь никогда не будет над ним, поэтому ничего не изменится.
(То же самое происходит, если я помещаю обработчик в документ или document.body, за исключением того, что на удивление document.body не получает события mouseover/mouseout, когда мышь входит или покидает пустую часть окна, например, пустую вертикальное пространство, созданное путем абсолютного позиционирования элемента с дном: 0. Для этого пространства документ и окно получат события mouseover/mouseout, причем целью является <html> , но document.body не будет.)
Некоторые идеи, которые у меня были:
- В каждом событии mouseout найдите фактическую позицию мыши и посмотрите, действительно ли это над окном. Но я не знаю, действительно ли это возможно, и кажется, что было бы сложно устранить все условия гонки.
- Также зарегистрируйте обработчик mouseover и определите случаи, когда mouseout не выполняется (или вскоре после этого) a mouseover. Но для этого потребуется таймер.
Мы используем prototype.js, поэтому в идеале я хотел бы выразить решение с точки зрения прототипа Event.observe, но я могу понять, что его часть.
Спасибо за любые предложения!