При создании событий щелчка я стараюсь привязывать их только один раз - обычно к родительскому объекту, совместно используемому всеми узлами, которые должны запускать событие. Мне любопытно, однако, что наилучшая практика в событиях mouseover: имеет ли смысл связывать событие с родителем, когда результатом будет постоянная стрельба события при наведении мыши? Какова самая эффективная практика?Делегирование событий при наведении на мышь
ответ
Для того, чтобы обеспечить некоторое закрытие на этот вопрос, я собираюсь перефразировать/цитату некоторые соответствующие заметок из этого ответа: «Should all jquery events be bound to $(document)?», который ссылается выше, @Faust:
Делегирование событий не всегда делает ваш код быстрее. Если вы не привязываетесь к динамическим элементам или тонне элементов, вы должны привязать обработчики событий непосредственно к объектам, где происходит событие, поскольку это, как правило, будет более эффективным.
Более конкретно, здесь раз, когда событие делегации требуется или преимущественный:
- Когда объекты вы захватывая события на динамически создаются/удаляются, и вы все еще хотите, чтобы фиксировать события на них без явного переделывать обработчики событий каждый раз, когда вы создаете новый.
- Когда у вас есть много объектов, для которых все хотят одного и того же обработчика событий (где лоты по меньшей мере сотни). В этом случае во время установки может быть более эффективным связывать один делегированный обработчик событий, а не сотни или более прямых обработчиков событий. Обратите внимание, что делегированная обработка событий всегда менее эффективна во время выполнения, чем обработчики прямых событий.
- Когда вы пытаетесь захватить (на более высоком уровне в документе) события, которые происходят на любом элементе документа.
- Когда ваш проект явно использует событие bubbling и stopPropagation(), чтобы решить некоторые проблемы или функции на вашей странице.
Оригинальный ответ на @ jfriend00
вы также можете прекратить распространение событий. Более подробная информация здесь: http://api.jquery.com/event.stoppropagation/ и здесь event.preventDefault() vs. return false
Итак, я знаю, этот вопрос давно мертв, но я полагал, что я мог бы также ответить таким образом, чтобы сделать это.
С динамическими элементами вы можете установить прослушиватель mousemove в родительском div/container, а затем запросить в div для элементов с атрибутом: hover.
Например:
<div class="list-container">
<ul class="dynamic-list-content">
<!-- actual list elements provided by js -->
</ul>
</div>
Тогда:
var listContainer = document.querySelector('.list-container');
listContainer.addEventListener('mousemove', function(e) {
var hovered = listContainer.querySelector('li:hover');
// do something with the hovered element here.
});
Обратите внимание, что (как вы упомянули) это не будет стрелять много, но не больше, чем если бы вы добавили MouseMove слушателя событий для человека записей. И вы можете немного отбросить это, используя атрибуты данных, уникальные идентификаторы и т. Д. Из моих тестов, однако, это довольно эффективно в Chrome.
- 1. fadein fadeout jquery при наведении на мышь
- 2. Выполнение анимации textillate.js при наведении на мышь
- 3. JQuery - Время записи при наведении курсора мыши и на мышь?
- 4. innerHTML и делегирование событий
- 5. Делегирование событий касания
- 6. Как использовать делегирование событий при использовании clipboardjs?
- 7. Делегирование событий в JavaScript - Поведение
- 8. события и делегирование прикованных событий
- 9. 2 изображения. изменение только при наведении курсора не на мышь
- 10. Отключить мышь EventListener при наведении на карту Google
- 11. Перехват или делегирование событий с перекрывающимися компонентами
- 12. Делегирование событий - пропуски JQuery Нажмите
- 13. Делегирование событий в X-tag
- 14. Делегирование событий и $ (это) .val()
- 15. событий, не срабатывающих при наведении элементов мыши
- 16. Есть ли делегирование событий в SDK SDK?
- 17. На наведении на мышь изменить auto на false
- 18. столкновения событий обнаружения + мышь в kineticjs
- 19. Как избежать кратных событий при наведении указателя мыши на элемент?
- 20. Аудио при наведении на изображение
- 21. В каких библиотеках JavaScript есть делегирование событий?
- 22. clojurescript core.async - скажите, если мышь опущена при наведении указателя мыши
- 23. jQuery делегирование событий и элементы управления DOM
- 24. jQuery - Делегирование событий происходит несколько раз
- 25. Оверлей на глификонах при наведении
- 26. Делегирование событий Hammer.js с помощью jQuery
- 27. Unbind даже при наведении на ребенке
- 28. Изменение класса при наведении указателя мыши на
- 29. Java Script при наведении на действия фокуса
- 30. Мышь Обработка событий для элемента
Этот ответ может быть уместным: http://stackoverflow.com/a/12824698/613004 - вопрос о привязке всех событий к документу, который отличается от нашего Q, но длинный ответ по-прежнему содержит информацию, которая применяется , – Faust
Это очень полезно. Спасибо. –