11.03.2012, 13:42
|
Аспирант
|
|
Регистрация: 30.04.2010
Сообщений: 49
|
|
отсрочить проверку отлавливания события
Здравствуйте.
Скажите, есть ли возможность как-то отсрочить отлавливание события (в моем случае, mouseleave)? Подчеркну, не срабатывания кода по данному событию, а именно факта его наступления. Чтобы выпадающее меню не закрывалось, если человек случайно на полсекунды вывел мышку из блока и вернулся назад.
|
|
11.03.2012, 13:45
|
Server
|
|
Регистрация: 26.09.2011
Сообщений: 252
|
|
Так, как вы сформулировали-нет, нельзя.
|
|
11.03.2012, 14:01
|
|
Профессор
|
|
Регистрация: 04.12.2009
Сообщений: 579
|
|
нет, отсрочить событие нельзя. можно по событию с задержкой вызвать программно другое событие/функцию, которая скроет меню.
__________________
С моих слов записано верно.
|
|
11.03.2012, 14:11
|
Аспирант
|
|
Регистрация: 30.04.2010
Сообщений: 49
|
|
T-sh, я думал об этом, но непонятно как в этой функции проверять не вернулась ли мышь на блок меню. По координатам, конечно можно, но "костыльно" как-то это.
|
|
11.03.2012, 14:18
|
|
Профессор
|
|
Регистрация: 04.12.2009
Сообщений: 579
|
|
Сообщение от Polkan
|
T-sh, я думал об этом, но непонятно как в этой функции проверять не вернулась ли мышь на блок меню. По координатам, конечно можно, но "костыльно" как-то это.
|
ну, проверить, не вернулась ли мышь не так уж сложно
оборачивайте выпавшее меню div'ом и отслеживайте на нём событие.
получатся вложенные события:
с блока А ушла мышь{
на блок Б пришла мышь{ ничего не делать; остановить выполнение;}
иначе {скрыть}
}
__________________
С моих слов записано верно.
|
|
11.03.2012, 14:23
|
|
Профессор
|
|
Регистрация: 04.12.2009
Сообщений: 579
|
|
забыл добавить: оберточный блок шире и выше менюшного пикселей эдак на 50. иначе не поймает, а больше и не надо.. случайно промахнуться больше чем на 50 пикселей редко бывает)
__________________
С моих слов записано верно.
|
|
11.03.2012, 14:26
|
Server
|
|
Регистрация: 26.09.2011
Сообщений: 252
|
|
вы можете по mouseleave вешать var interval=таймаут на 0.5 секунд на код, который меню закрывает, interval сохранить.
Если мышь вернулась-то есть это те события, по которым меню раскрывается, и если interval не null-тогда clearInterval(interval), что отменит складывание меню.
ничего сложного.
|
|
11.03.2012, 14:28
|
|
Профессор
|
|
Регистрация: 04.12.2009
Сообщений: 579
|
|
кстати, да. Rootpassword прав.
я тут совсем нелогичные костыли изобретаю.
__________________
С моих слов записано верно.
|
|
11.03.2012, 15:29
|
Аспирант
|
|
Регистрация: 30.04.2010
Сообщений: 49
|
|
Rootpassword, T-sh, спасибо за советы. Но пока не выходит. С clearTimeout загвоздка в том, что при перемещении по меню пункты с которых ушла мышь скрываются, одновременно те, на которые пришла - показываются. Все это обрабатывается двумя функциями - mouseleave и mouseenter. И получается, что, вешая на "те события, по которым меню раскрывается" clearTimeout, я решаю проблему со скрытием меню при выходе за границу, но получаю еще бОльшую - отменяю действие скрытия меню при перемещении с пункта на пункт.
|
|
11.03.2012, 15:29
|
Лаборант :-)
|
|
Регистрация: 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>
|
|
|
|