Bliss.js — это компактная и высокоэффективная библиотека для работы с DOM и событиями в JavaScript. Одной из её сильных сторон является удобная работа с пользовательскими событиями, которые позволяют создавать собственные события и управлять ими так же просто, как стандартными браузерными событиями.
В Bliss.js для создания собственного события используется метод
trigger. Любой элемент DOM может инициировать
пользовательское событие с помощью этого метода:
// Создание пользовательского события 'dataReady' с передачей данных
let data = { user: 'Alice', id: 42 };
document.querySelector('#app').trigger('dataReady', [data]);
Ключевой момент: метод trigger принимает имя
события и массив аргументов, которые будут переданы
обработчикам. В отличие от стандартного CustomEvent,
Bliss.js упрощает синтаксис, исключая необходимость создавать объект
события вручную.
Подписка осуществляется через метод on, аналогично
стандартным событиям DOM:
document.querySelector('#app').on('dataReady', function(event, data) {
console.log('Данные получены:', data);
});
Особенности подписки в Bliss.js:
trigger.this внутри обработчика
указывает на DOM-элемент, на котором событие было вызвано.Метод off позволяет полностью снять обработчики события
или удалить конкретный обработчик:
function handleData(event, data) {
console.log(data);
}
let app = document.querySelector('#app');
app.on('dataReady', handleData);
// Удаление конкретного обработчика
app.off('dataReady', handleData);
// Удаление всех обработчиков события
app.off('dataReady');
При использовании off важно указывать ту же
функцию, которая была передана в on, иначе
обработчик останется активным.
Bliss.js поддерживает делегирование даже для кастомных событий. Это позволяет навешивать обработчик на родительский элемент и отслеживать события, возникающие на дочерних элементах:
document.body.on('dataReady', '#app .child', function(event, data) {
console.log('Дочерний элемент инициировал событие:', data);
});
Преимущества делегирования:
Передача данных осуществляется через массив аргументов в
trigger. Любые объекты JavaScript могут быть переданы:
let user = { name: 'Bob', age: 30 };
document.querySelector('#app').trigger('userUpdate', [user, true]);
В обработчике данные будут доступны как отдельные параметры:
document.querySelector('#app').on('userUpdate', function(event, user, isActive) {
console.log(user.name, 'активен:', isActive);
});
Bliss.js предоставляет удобные вспомогательные методы для работы с пользовательскими событиями:
one(eventName, handler) — обработчик будет вызван
только один раз.triggerHandler(eventName, args) — вызывает событие
только для данного элемента, не всплывая по DOM.Пример использования one:
document.querySelector('#app').one('init', function() {
console.log('Инициализация выполнена только один раз');
});
document.querySelector('#app').trigger('init'); // Вызовет обработчик
document.querySelector('#app').trigger('init'); // Игнорируется
По умолчанию пользовательские события в Bliss.js всплывают по
DOM, что позволяет организовывать централизованную обработку.
Всплытие можно остановить с помощью стандартного метода
stopPropagation:
document.querySelector('#app').on('customEvent', function(event) {
event.stopPropagation();
console.log('Событие обработано без всплытия');
});
Bliss.js интегрирует пользовательские события с нативными событиями браузера. Это позволяет комбинировать стандартные события и кастомные, создавая сложные логики взаимодействия:
document.querySelector('#app').on('click', function() {
this.trigger('clicked');
});
document.querySelector('#app').on('clicked', function() {
console.log('Элемент был нажат и событие кастомное сработало');
});
Таким образом, пользовательские события в Bliss.js становятся мощным инструментом для построения модульной и динамичной логики интерфейса. Они объединяют простоту синтаксиса, гибкость передачи данных и совместимость с DOM, делая разработку интерактивных приложений более прозрачной и управляемой.