отсрочить проверку отлавливания события
Здравствуйте.
Скажите, есть ли возможность как-то отсрочить отлавливание события (в моем случае, mouseleave)? Подчеркну, не срабатывания кода по данному событию, а именно факта его наступления. Чтобы выпадающее меню не закрывалось, если человек случайно на полсекунды вывел мышку из блока и вернулся назад. |
Так, как вы сформулировали-нет, нельзя.
|
нет, отсрочить событие нельзя. можно по событию с задержкой вызвать программно другое событие/функцию, которая скроет меню.
|
T-sh, я думал об этом, но непонятно как в этой функции проверять не вернулась ли мышь на блок меню. По координатам, конечно можно, но "костыльно" как-то это.
|
Цитата:
оборачивайте выпавшее меню div'ом и отслеживайте на нём событие. получатся вложенные события: с блока А ушла мышь{ на блок Б пришла мышь{ ничего не делать; остановить выполнение;} иначе {скрыть} } |
забыл добавить: оберточный блок шире и выше менюшного пикселей эдак на 50.:) иначе не поймает, а больше и не надо.. случайно промахнуться больше чем на 50 пикселей редко бывает)
|
вы можете по mouseleave вешать var interval=таймаут на 0.5 секунд на код, который меню закрывает, interval сохранить.
Если мышь вернулась-то есть это те события, по которым меню раскрывается, и если interval не null-тогда clearInterval(interval), что отменит складывание меню. ничего сложного. |
кстати, да. Rootpassword прав.
я тут совсем нелогичные костыли изобретаю. |
Rootpassword, T-sh, спасибо за советы. Но пока не выходит. С clearTimeout загвоздка в том, что при перемещении по меню пункты с которых ушла мышь скрываются, одновременно те, на которые пришла - показываются. Все это обрабатывается двумя функциями - mouseleave и mouseenter. И получается, что, вешая на "те события, по которым меню раскрывается" clearTimeout, я решаю проблему со скрытием меню при выходе за границу, но получаю еще бОльшую - отменяю действие скрытия меню при перемещении с пункта на пункт.
|
у библиотек бывают, при назначении события, удобные опции
например в 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> |
Часовой пояс GMT +3, время: 04:46. |