Проверьте, запущено ли другое событие из функции обработчика событий - PullRequest
0 голосов
/ 02 марта 2012

Давайте представим, что у меня есть функция обработчика событий, прикрепленная к изображению, например, обработчик onmouseover. Я не хочу запускать этот обработчик, если событие onmouseover запускается определенным элементом.

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

Так что-то вроде этого в псевдокоде

img.mouseout = function () {
if (otherelement.onmouseover.fired) {
 leave the menu as it is
} 
else 
{
close the menu
}

Так как я могу проверить, было ли запущено другое событие?

1 Ответ

0 голосов
/ 02 марта 2012

Я бы добавил таймаут и обработчик при наведении курсора, который очищает его в другом обработчике. Хотя элементы визуально могут быть точно рядом друг с другом, добавление небольшого таймера более безопасно, так как может существовать крошечная область размером 1 пиксель, где происходит событие mouseout, вызывая мерцание.

Это также позволяет быстро взбивать мышами без мерцания.

Что-то вроде:

var timer;

img.onmouseout = other.onmouseout = function() {
  timer = setTimeout(closemenu, 100);
}

img.onmouseover = other.onmouseover = function() {
  clearTimeout(timer);
}

function closemenu() {
  // close it
}
...