Одной из важных функций Javascript является обработка событий, позволяющая пользователю взаимодействовать с веб-страницами. По мере того как веб-приложения становятся все более сложными, обработка событий может стать изматывающей. Именно здесь делегирование событий вступает в игру как метод оптимизации обработки событий. В этой статье мы рассмотрим концепцию делегирования событий, ее преимущества и способы ее реализации в вашем коде.
Делегирование событий — это просто метод обработки событий нескольких элементов с помощью одного прослушивателя событий. Вместо того, чтобы добавлять прослушиватель событий к каждому элементу, прослушиватель событий добавляется к родительскому элементу, который прослушивает события, инициированные дочерним элементом.
Давайте рассмотрим пример с делегированием событий и без него.
<div class=”buttons”> <button class=”button_sub”>Subtract</button> <button class=”button_reset”>Reset</button> <button class=”button_add”>Add</button> </div>
Вы можете добавить необходимые обработчики событий click
для каждой кнопки для обработки события click
:
let addButton = document.querySelector(.button_add) addButton.addEventListener(‘click’, () => { console.log(‘Add button was clicked’) }) let subtractButton = document.querySelector(.button_sub) addButton.addEventListener(‘click’, () => { console.log(‘Subtract button was clicked’) }) let resetButton = document.querySelector(.button_reset) addButton.addEventListener(‘click’, () => { console.log(‘Reset button was clicked’) })
Наличие множества обработчиков событий на странице может отрицательно сказаться на приложении, в том числе:
* Каждый прослушиватель событий — это функция, которая также является объектом, занимающим память, а наличие слишком большого количества объектов в памяти может привести к к увеличению использования памяти, что, в свою очередь, может снизить производительность приложения.
* Может усложнить управление кодом и его отладку.
с делегированием событий
buttons.addEventListener(“click”, (event) => { if (event.target.classList.contains(‘button_add’)) { console.log(‘Add button was clicked’) } if (event.target.classList.contains(‘button_sub’)) { console.log(‘Subtract button was clicked’) } if (event.target.classList.contains(‘button_reset’)) { console.log(‘Reset button was clicked’) } })
Свойство target
объекта event
содержит информацию о фактическом элементе, получающем событие. В event.target.classList.contains
мы проверяем, присутствует ли определенный класс CSS в элементе HTML, вызвавшем событие.
Когда вы нажимаете button
, событие всплывает до div
(родительский элемент), который обрабатывает событие.
Преимущества делегирования событий
* Вы можете писать более чистый код и создавать меньше прослушивателей событий с аналогичной логикой.
* Меньше памяти, выше производительность.
Заключение
Подводя итог, делегирование событий — это эффективный метод, который может значительно повысить производительность ваших веб-приложений. Хотя это может потребовать некоторых первоначальных усилий для настройки, преимущества могут быть существенными в долгосрочной перспективе, особенно для сложных веб-приложений.