Библиотека Cash предоставляет компактный и удобный способ работы с DOM, включая управление событиями. Триггеры событий позволяют привязывать функции к определённым действиям пользователя или изменениям DOM, обеспечивая динамическое поведение элементов страницы. В основе лежит концепция событийного делегирования и унифицированного API, похожего на jQuery, но с меньшим весом.
Для привязки обработчика используется метод
.on(event, selector, handler):
$('.button').on('click', function(event) {
console.log('Кнопка нажата');
});
Пояснения:
event — тип события, например 'click',
'mouseover', 'keydown'.selector — необязательный параметр. Если указан,
событие отслеживается для потомков соответствующего селектора.handler — функция, вызываемая при срабатывании
события.Поддерживаются множественные события через пробел:
$('.input').on('focus blur', function() {
console.log('Элемент в фокусе или потерял его');
});
Метод .off(event, handler) позволяет снять обработчики с
элементов:
function handleClick() {
console.log('Нажатие обработано');
}
$('.button').on('click', handleClick);
// Позже снимаем обработчик
$('.button').off('click', handleClick);
Если не указывать handler, удаляются все обработчики
указанного события.
Cash поддерживает делегирование событий через указание селектора-потомка. Это позволяет оптимизировать обработку на динамически создаваемых элементах:
$('#list').on('click', '.item', function() {
console.log('Элемент списка кликнут');
});
Событие привязывается к родителю #list, но срабатывает
только на потомках .item. Это уменьшает количество
обработчиков и позволяет работать с элементами, добавленными после
загрузки страницы.
Метод .one(event, handler) позволяет задать обработчик,
который сработает только один раз:
$('.button').one('click', function() {
console.log('Сработает только один раз');
});
После первого вызова обработчик автоматически удаляется.
Метод .trigger(event, data) используется для
искусственного вызова событий:
$('.input').on('change', function(event, extra) {
console.log('Изменено значение', extra);
});
$('.input').trigger('change', ['Дополнительные данные']);
data передается обработчику как дополнительные
аргументы. Это полезно для имитации пользовательских действий или для
синхронизации разных частей интерфейса.
Внутри обработчика this ссылается на DOM-элемент, на
котором произошло событие. Для получения Cash-объекта можно использовать
cash(this):
$('.button').on('click', function() {
cash(this).addClass('active');
});
Cash позволяет работать с глобальными объектами, такими как
document и window:
cash(document).on('keydown', function(event) {
console.log('Нажата клавиша', event.key);
});
cash(window).on('resize', function() {
console.log('Размер окна изменён');
});
Это расширяет возможности работы с событиями, выходя за рамки отдельных элементов.
Библиотека поддерживает нестандартные, синтетические события:
ready — срабатывает после полной загрузки DOM:cash(document).on('ready', function() {
console.log('DOM готов к работе');
});
.trigger
с любым именем.Для сложных интерфейсов рекомендуется использовать:
.one для событий, которые
должны сработать один раз.trigger, чтобы не
передавать тяжелые объекты.Это снижает нагрузку на браузер и предотвращает утечки памяти.
При привязке обработчиков можно сразу передавать данные:
$('.button').on('click', { role: 'admin' }, function(event) {
console.log('Роль пользователя:', event.data.role);
});
Эта функциональность особенно полезна для динамических элементов, где каждый обработчик должен иметь уникальные параметры.
Cash позволяет управлять приоритетом срабатывания через порядок
подключения обработчиков. Также можно использовать методы
event.stopPropagation() и
event.preventDefault() для контроля всплытия и поведения
браузера:
$('.link').on('click', function(event) {
event.preventDefault();
console.log('Ссылка не переходит по адресу');
});
События в Cash тесно связаны с анимацией и динамическими эффектами, что позволяет запускать действия при завершении анимации, наведении курсора, изменении состояния элементов:
$('.box').on('transitionend', function() {
console.log('Анимация завершена');
});
Это делает библиотеку универсальным инструментом для интерактивного интерфейса.