Это может быть не совсем то, что вы хотите, но все равно посмотрите, может быть, вы можете использовать его в своих интересах.
Существует отличное решение, написанное моим бывшим сотрудником, которое может создавать специальные функции-обработчики, которые могут останавливать и запускать тайм-ауты при необходимости. Это наиболее широко используется, когда вам нужно создать небольшую задержку для событий наведения. Например, когда вы хотите скрыть меню при наведении курсора не точно в тот момент, когда мышь покидает его, а через несколько миллисекунд. Но если мышь возвращается, вам нужно отменить тайм-аут.
Решением является функция с именем getDelayedHandlers . Например, у вас есть функция, которая показывает и скрывает меню
function handleMenu(show) {
if (show) {
// This part shows the menu
} else {
// This part hides the menu
}
}
Затем вы можете создать для него отложенные обработчики:
var handlers = handleMenu.getDelayedHandlers({
in: 200, // 'in' timeout
out: 300, // 'out' timeout
});
handlers
становится объектом, который содержит две функции-обработчики, которые при вызове отменяют время ожидания другого.
var element = $('menu_element');
element.observe('mouseover', handlers.over);
element.observe('mouseout', handlers.out);
P.S. Чтобы это решение работало, вам необходимо расширить объект Function с помощью функции curry
, которая автоматически выполняется в Prototype .