Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.03.2012, 13:42
Аспирант
Отправить личное сообщение для Polkan Посмотреть профиль Найти все сообщения от Polkan
 
Регистрация: 30.04.2010
Сообщений: 49

отсрочить проверку отлавливания события
Здравствуйте.
Скажите, есть ли возможность как-то отсрочить отлавливание события (в моем случае, mouseleave)? Подчеркну, не срабатывания кода по данному событию, а именно факта его наступления. Чтобы выпадающее меню не закрывалось, если человек случайно на полсекунды вывел мышку из блока и вернулся назад.
Ответить с цитированием
  #2 (permalink)  
Старый 11.03.2012, 13:45
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

Так, как вы сформулировали-нет, нельзя.
Ответить с цитированием
  #3 (permalink)  
Старый 11.03.2012, 14:01
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

нет, отсрочить событие нельзя. можно по событию с задержкой вызвать программно другое событие/функцию, которая скроет меню.
__________________
С моих слов записано верно.
Ответить с цитированием
  #4 (permalink)  
Старый 11.03.2012, 14:11
Аспирант
Отправить личное сообщение для Polkan Посмотреть профиль Найти все сообщения от Polkan
 
Регистрация: 30.04.2010
Сообщений: 49

T-sh, я думал об этом, но непонятно как в этой функции проверять не вернулась ли мышь на блок меню. По координатам, конечно можно, но "костыльно" как-то это.
Ответить с цитированием
  #5 (permalink)  
Старый 11.03.2012, 14:18
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

Сообщение от Polkan Посмотреть сообщение
T-sh, я думал об этом, но непонятно как в этой функции проверять не вернулась ли мышь на блок меню. По координатам, конечно можно, но "костыльно" как-то это.
ну, проверить, не вернулась ли мышь не так уж сложно
оборачивайте выпавшее меню div'ом и отслеживайте на нём событие.

получатся вложенные события:

с блока А ушла мышь{
на блок Б пришла мышь{ ничего не делать; остановить выполнение;}
иначе {скрыть}
}
__________________
С моих слов записано верно.
Ответить с цитированием
  #6 (permalink)  
Старый 11.03.2012, 14:23
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

забыл добавить: оберточный блок шире и выше менюшного пикселей эдак на 50. иначе не поймает, а больше и не надо.. случайно промахнуться больше чем на 50 пикселей редко бывает)
__________________
С моих слов записано верно.
Ответить с цитированием
  #7 (permalink)  
Старый 11.03.2012, 14:26
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

вы можете по mouseleave вешать var interval=таймаут на 0.5 секунд на код, который меню закрывает, interval сохранить.
Если мышь вернулась-то есть это те события, по которым меню раскрывается, и если interval не null-тогда clearInterval(interval), что отменит складывание меню.
ничего сложного.
Ответить с цитированием
  #8 (permalink)  
Старый 11.03.2012, 14:28
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

кстати, да. Rootpassword прав.

я тут совсем нелогичные костыли изобретаю.
__________________
С моих слов записано верно.
Ответить с цитированием
  #9 (permalink)  
Старый 11.03.2012, 15:29
Аспирант
Отправить личное сообщение для Polkan Посмотреть профиль Найти все сообщения от Polkan
 
Регистрация: 30.04.2010
Сообщений: 49

Rootpassword, T-sh, спасибо за советы. Но пока не выходит. С clearTimeout загвоздка в том, что при перемещении по меню пункты с которых ушла мышь скрываются, одновременно те, на которые пришла - показываются. Все это обрабатывается двумя функциями - mouseleave и mouseenter. И получается, что, вешая на "те события, по которым меню раскрывается" clearTimeout, я решаю проблему со скрытием меню при выходе за границу, но получаю еще бОльшую - отменяю действие скрытия меню при перемещении с пункта на пункт.
Ответить с цитированием
  #10 (permalink)  
Старый 11.03.2012, 15:29
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

у библиотек бывают, при назначении события, удобные опции
например в Ext есть параметр buffer: xxx милисекунд
если за это время было несколько событий mouseout, то вызовется только одно и можно закрывать меню или что-то другое
<script src="http://yandex.st/ext-core/3.1.0/ext-core.min.js"></script>

<div id="box" style="width: 100px; height: 100px; background: #cfc;"></div>

<script>
	Ext.get("box").on('mouseout', function (event, el) {
		alert('можно скрывать');
	}, this, {buffer: 1000});
</script>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление события кнопки TheHappy Общие вопросы Javascript 0 06.03.2012 10:30
Как сделать чтобы клавиатурные события пропускались сквозь флешку? khusamov Общие вопросы Javascript 3 11.02.2012 16:48
Передача параметров в колбэки и дальнейшее их вешанье на события. Gremlin Общие вопросы Javascript 17 13.08.2011 08:54
Drug&Drop + всплывание события = проблемы =(( _NoName_ Events/DOM/Window 4 05.03.2009 17:47
Явный вызов процедуры обработки события. supchik Общие вопросы Javascript 18 27.01.2009 13:16