
Одной из важных функций 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 (родительский элемент), который обрабатывает событие.
Преимущества делегирования событий
* Вы можете писать более чистый код и создавать меньше прослушивателей событий с аналогичной логикой.
* Меньше памяти, выше производительность.
Заключение
Подводя итог, делегирование событий — это эффективный метод, который может значительно повысить производительность ваших веб-приложений. Хотя это может потребовать некоторых первоначальных усилий для настройки, преимущества могут быть существенными в долгосрочной перспективе, особенно для сложных веб-приложений.