Interact.js предоставляет мощный и гибкий механизм для обработки взаимодействий с элементами DOM через события. Основное различие в работе событий заключается в их уровне привязки: глобальные слушатели и локальные слушатели. Понимание этого различия критично для эффективного управления взаимодействиями и оптимизации производительности.
Локальные слушатели привязываются непосредственно к конкретному элементу. Это означает, что события будут срабатывать только для этого элемента и его дочерних элементов, если они участвуют в взаимодействии.
interact('.draggable')
.draggable({
listeners: {
start (event) {
console.log('Начало перетаскивания', event.target);
},
move (event) {
event.target.style.transform =
`translate(${event.dx}px, ${event.dy}px)`;
},
end (event) {
console.log('Конец перетаскивания', event.target);
}
}
});
Ключевые моменты локальных слушателей:
start, move, end,
inertiaStart, cancel доступны для обработки
всех фаз взаимодействия.Глобальные слушатели работают на уровне всей библиотеки и срабатывают для всех элементов, участвующих в интеракциях. Они полезны для отслеживания событий без привязки к конкретному DOM-элементу, например, для логирования или глобального управления состоянием.
interact.globalEvents.on('dragmove', function (event) {
console.log('Глобальное движение элемента', event.target);
});
Особенности глобальных слушателей:
interact.globalEvents.dragstart,
dragmove, dragend, resizestart,
resizemove, resizeend,
gesturestart, gesturemove,
gestureend.| Характеристика | Локальные слушатели | Глобальные слушатели |
|---|---|---|
| Привязка | К конкретному элементу или селектору | К всей библиотеке Interact.js |
| Область действия | Ограничена элементом | Все элементы, зарегистрированные через Interact.js |
| Управление | Локальное управление состоянием элемента | Глобальный контроль, логирование, статистика |
| Применение | Перетаскивание, ресайз, жесты на отдельном элементе | Глобальный мониторинг, события между элементами, общие эффекты |
Часто требуется использовать оба типа слушателей одновременно. Локальные слушатели управляют поведением элемента, а глобальные — обеспечивают наблюдение за всей интерактивной системой.
interact('.resizable')
.resizable({
edges: { left: true, right: true, bottom: true, top: true },
listeners: {
move (event) {
let { x, y } = event.target.dataset;
x = (parseFloat(x) || 0) + event.deltaRect.left;
y = (parseFloat(y) || 0) + event.deltaRect.top;
Object.assign(event.target.style, {
width: `${event.rect.width}px`,
height: `${event.rect.height}px`,
transform: `translate(${x}px, ${y}px)`
});
event.target.dataset.x = x;
event.target.dataset.y = y;
}
}
});
interact.globalEvents.on('resizemove', event => {
console.log('Глобальное событие resize', event.target);
});
Такое сочетание позволяет отслеживать индивидуальные изменения каждого элемента и одновременно вести глобальный учет всех действий пользователей на странице.
event.target.Глубокое понимание различий между глобальными и локальными слушателями позволяет создавать масштабируемые, отзывчивые и оптимизированные интерфейсы с использованием Interact.js, обеспечивая контроль как на уровне отдельных элементов, так и на уровне всей системы интерактивности.