Dom7 — это лёгкая библиотека для работы с DOM, используемая в основном вместе с фреймворком Framework7, но при этом полностью самостоятельная и удобная для управления элементами на странице. Одной из ключевых возможностей является работа с кастомными событиями, что позволяет создавать гибкие и масштабируемые интерфейсы без привязки к стандартным событиям браузера.
Кастомные события позволяют передавать информацию между компонентами
или элементами DOM. В Dom7 для этого используются методы
.trigger() и .on().
Пример создания и вызова кастомного события:
import Dom7 from 'dom7';
const $button = Dom7('.my-button');
$button.on('myCustomEvent', function (event, data) {
console.log('Кастомное событие вызвано', data);
});
$button.trigger('myCustomEvent', { id: 123, name: 'example' });
В этом примере происходит следующее:
myCustomEvent..trigger() событие вызывается с передачей
дополнительных данных в виде объекта.Ключевой момент: данные передаются вторым аргументом
в trigger() и доступны в обработчике после объекта
события.
Dom7 поддерживает делегирование событий через передачу селектора
вторым аргументом в .on(). Это особенно удобно при
динамическом добавлении элементов на страницу.
const $container = Dom7('.container');
$container.on('myCustomEvent', '.dynamic-item', function (event, data) {
console.log('Событие на динамическом элементе', data);
});
Dom7('.container').append('<div class="dynamic-item">Элемент</div>');
Dom7('.dynamic-item').trigger('myCustomEvent', { value: 42 });
В данном примере обработчик установлен на родительский контейнер, но
реагирует только на элементы с классом .dynamic-item. Это
обеспечивает экономию ресурсов и позволяет работать с элементами,
которых ещё нет в DOM в момент регистрации обработчика.
Dom7 позволяет передавать несколько аргументов при вызове кастомного события:
const $element = Dom7('#element');
$element.on('update', function (event, arg1, arg2) {
console.log(arg1, arg2);
});
$element.trigger('update', ['data1', { key: 'value' }]);
При этом каждый аргумент передаётся в обработчик в том порядке, в
котором он был указан в trigger().
Для удаления обработчиков используется метод .off(). Он
позволяет как полностью снять обработчик с элемента, так и удалить
конкретный обработчик по имени события или селектору.
const $element = Dom7('#element');
function handler(event, data) {
console.log('Обработчик сработал', data);
}
$element.on('myEvent', handler);
$element.off('myEvent', handler);
Если необходимо удалить все обработчики для события, достаточно
вызвать .off('myEvent'). Для делегированных событий также
можно указать селектор.
Dom7 полностью совместим с нативными событиями браузера. Это значит, что можно комбинировать кастомные и стандартные события:
const $button = Dom7('.button');
$button.on('click myCustomEvent', function (event) {
console.log('Событие произошло', event.type);
});
Метод .trigger() подходит только для кастомных событий,
но при желании можно инициировать нативные события через стандартный API
dispatchEvent.
once для одноразовых обработчиковМетод .once() позволяет зарегистрировать обработчик,
который сработает только один раз:
const $element = Dom7('#element');
$element.once('singleEvent', function (event, data) {
console.log('Обработчик сработал один раз', data);
});
$element.trigger('singleEvent', { value: 1 });
$element.trigger('singleEvent', { value: 2 }); // Игнорируется
Это полезно для инициализации или одноразовой реакции на событие.
Кастомные события в Dom7 — это универсальный инструмент, позволяющий
строить сложные интерактивные приложения, поддерживая чистую и модульную
архитектуру. Правильное использование .on(),
.trigger(), .off() и .once()
обеспечивает гибкость, масштабируемость и контроль над потоком событий в
приложении.