Interact.js строится вокруг мощной системы событий, которая обеспечивает взаимодействие с элементами страницы через действия drag, resize, gesture и другие. События в этой библиотеке делятся на категории по типу действия, а также могут быть глобальными или локальными для конкретного элемента.
События передают объект события, содержащий ключевую информацию о
взаимодействии: координаты курсора, объект цели, текущее состояние
действия, модификаторы и прочие метаданные. Работа с ними строится через
метод interact(target).on(event, listener).
Пример базовой привязки события:
interact('.draggable')
.draggable(true)
.on('dragmove', function (event) {
let target = event.target;
target.style.transform =
`translate(${event.dx}px, ${event.dy}px)`;
});
Здесь dragmove — событие, вызываемое на каждом
перемещении элемента. Объект event содержит свойства
dx и dy, показывающие смещение с предыдущего
кадра.
Interact.js поддерживает несколько категорий событий, каждая из которых отвечает за определённый тип действий:
Пример использования dragenter:
interact('.dropzone')
.dropzone(true)
.on('dragenter', function (event) {
event.target.classList.add('highlight');
});
rect с
текущей шириной и высотой, а также смещения deltaRect.Пример:
interact('.resizable')
.resizable({ edges: { left: true, right: true, bottom: true, top: true } })
.on('resizemove', function (event) {
let target = event.target;
target.style.width = event.rect.width + 'px';
target.style.height = event.rect.height + 'px';
});
Gesture-события применяются при мультитач-взаимодействиях:
scale и rotation.Каждое событие содержит ключевые свойства:
Это позволяет создавать точные и предсказуемые реакции на действия пользователя.
Interact.js позволяет привязывать обработчики как к конкретным элементам, так и использовать делегирование через CSS-селекторы. Например:
interact(document.body)
.on('dragmove', '.draggable', function (event) {
console.log('Перетаскивается элемент:', event.target);
});
В этом случае обработчик срабатывает для всех элементов с классом
.draggable, даже если они были динамически добавлены в
DOM.
События могут быть связаны с модификаторами
(modifiers) для ограничения действий. Например,
фиксирование перемещений по сетке или ограничение в контейнере:
interact('.draggable')
.draggable({
modifiers: [
interact.modifiers.snap({
targets: [interact.snappers.grid({ x: 50, y: 50 })],
range: Infinity,
relativePoints: [{ x: 0, y: 0 }]
})
]
})
.on('dragmove', function (event) {
event.target.style.transform =
`translate(${event.pageX}px, ${event.pageY}px)`;
});
События автоматически учитывают модификаторы, поэтому координаты и смещения корректируются в соответствии с ограничениями.
Interact.js позволяет одновременно обрабатывать несколько типов действий на одном элементе:
interact('.box')
.draggable(true)
.resizable({ edges: { left: true, right: true, bottom: true, top: true } })
.on('dragmove', dragHandler)
.on('resizemove', resizeHandler);
При этом библиотека самостоятельно синхронизирует состояния и предотвращает конфликт обработчиков, обеспечивая предсказуемое поведение.
События Interact.js можно отменять, предотвращая их дальнейшую обработку или стандартное поведение браузера. Для этого в обработчике используют:
event.preventDefault();
event.stopPropagation();
Это особенно важно при работе с жестами или drag&drop в сочетании с другими библиотеками и нативными событиями.
.on().dx,
dy или rect.dragend, resizeend или
gestureend.Эта схема обеспечивает гибкость и позволяет создавать сложные интерактивные интерфейсы с минимальными усилиями.