Какое событие использовать вместо onmouseout для запуска, когда мышь не находится над элементом?

я хочу запустить скрипт, когда я не зависаю над элементом. Это своего рода деактивация чего-то еще, что было запущено ранее в событии onmouseover. Итак, я использую событие onmouseout для запуска этого скрипта, однако проблема в том, что если я не наведу курсор на элемент, а затем оставлю его, скрипт просто не запустится. это происходит, например, если навести курсор на элемент слишком быстро или окно теряет фокус. Как я могу это решить?

РЕДАКТИРОВАТЬ: позвольте мне проиллюстрировать это по-другому. Мне нужно, чтобы событие запускалось, когда мышь не касается элемента.


person Ahmed Elyamani    schedule 01.11.2012    source источник
comment
невозможность обнаружения наведения, если мышь движется слишком быстро, если вы не отслеживаете движение мыши вручную и не запускаете все свои наведения самостоятельно. Затем вы можете добавить линейную интерполяцию, чтобы проверить движение курсора мыши между кадрами и вычислить все события onMouseX.   -  person John Dvorak    schedule 01.11.2012
comment
ну, может быть, я не хочу обнаруживать наведение здесь, я хочу проверить, наведена ли мышь или нет   -  person Ahmed Elyamani    schedule 01.11.2012
comment
если onMouseOut теряется из-за быстрого движения, то onMouseOver тоже, так что вы можете правильно отслеживать свое состояние.   -  person John Dvorak    schedule 01.11.2012
comment
Вы, вероятно, захотите запустить тот же скрипт, который запускается на onMouseOut при загрузке скрипта.   -  person John Dvorak    schedule 01.11.2012
comment
правильно, но здесь происходит то, что я вхожу в элементы нормально, но покидаю их очень быстро..   -  person Ahmed Elyamani    schedule 01.11.2012
comment
что вы имеете в виду, пожалуйста, проиллюстрируйте?   -  person Ahmed Elyamani    schedule 01.11.2012
comment
Затем должно сработать их событие onMouseOut, хотя, возможно, и в неправильном порядке (новые элементы вводятся до того, как останутся старые элементы).   -  person John Dvorak    schedule 01.11.2012
comment
(новые элементы вводятся раньше, чем остаются старые) именно это и происходит!   -  person Ahmed Elyamani    schedule 01.11.2012
comment
onMouseOut срабатывает, когда курсор мыши покидает элемент (т.е. был внутри и не находится).   -  person John Dvorak    schedule 01.11.2012
comment
Я не думаю, что порядок событий будет обратным (сверху до выхода), вопреки ожиданиям, но вы не можете ожидать многого от IE8.   -  person John Dvorak    schedule 01.11.2012


Ответы (2)


Вы можете попробовать это,

<div id="div1" onmouseover="fucntionIn()" onmouseout="functionOut()">"Special Area"</div>
<div id="div2" onmouseover="fucntionOut()">Other area</div>

логика состоит в том, чтобы написать деактивирующий код для события onmouseover в другой области страницы.

person Lasantha Bandara    schedule 01.11.2012
comment
Мне нравится ваша логика, однако код деактивации должен выполняться для того элемента, который запускал код активации. - person Ahmed Elyamani; 01.11.2012
comment
хммм.... тогда вам нужно установить атрибут, когда вы деактивируете элемент. затем выберите элемент с помощью document.getElementById(). и проверьте, активируется ли он с помощью атрибута. если он активирован, деактивируйте его. - person Lasantha Bandara; 02.11.2012
comment
проверьте, активируется ли он в каком событии? - person Ahmed Elyamani; 02.11.2012
comment
Вы можете использовать Jquery, чтобы делать такие вещи очень легко. Проверь это. api.jquery.com/attr/#attr2 - person Lasantha Bandara; 02.11.2012
comment
Я написал пример кода здесь (jsfiddle.net/XGunn). Работает ли это для вас? - person Lasantha Bandara; 02.11.2012

Что, если вы обнаружите onmouseover на всей странице (путем всплытия событий), и когда он входит в новый элемент, определите, является ли исходный элемент, который вы последний раз наблюдали, родителем текущего целевого элемента, если это не так, то вы знаете, что он вышел из исходный узел DOM, даже если onmouseout не сработал.

person Matt    schedule 01.11.2012
comment
Я не думаю, что браузер когда-либо забудет запустить событие onmouseout после запуска onmouseover - person John Dvorak; 01.11.2012
comment
@JanDvorak, хотя мне и хотелось бы так думать, я видел, как подобные ожидания разбивались, когда речь шла об изменении DOM. Хотя здесь это не так, следует отметить, что такие предположения не всегда верны (см. stackoverflow.com/questions/2732818/< /а>) - person Matt; 01.11.2012
comment
Интересная ссылка. Я не должен удивляться, что IE сделал что-то не так ;-) - person John Dvorak; 01.11.2012