Interact.js предоставляет богатый набор событий, позволяющих
отслеживать взаимодействие пользователя с элементами на странице.
Основные категории событий жестов включают drag
(перетаскивание), resize (изменение размеров)
и gesture (масштабирование и вращение мультитач).
Каждое событие сопровождается объектом event, содержащим
детальную информацию о текущем состоянии взаимодействия.
drag)Перетаскивание элементов является базовой функциональностью библиотеки. События, связанные с drag:
dragstart – инициируется при начале
перетаскивания. Объект события содержит event.target
(элемент) и event.clientX/Y (координаты мыши). Позволяет
задать начальные условия, например, добавить CSS-класс для визуальной
индикации перетаскивания.
dragmove – вызывается при каждом
перемещении мыши или пальца. Основные свойства:
event.dx и event.dy – смещение
относительно предыдущего кадра.event.pageX и event.pageY – абсолютные
координаты курсора.event.target – текущий элемент, перемещаемый
пользователем.Используется для динамического обновления позиции элемента через CSS или трансформации:
interact('.draggable')
.draggable({
listeners: {
move (event) {
const x = (parseFloat(event.target.getAttribute('data-x')) || 0) + event.dx
const y = (parseFloat(event.target.getAttribute('data-y')) || 0) + event.dy
event.target.style.transform = `translate(${x}px, ${y}px)`
event.target.setAttribute('data-x', x)
event.target.setAttribute('data-y', y)
}
}
})dragend – срабатывает после
завершения перетаскивания. Можно использовать для запуска анимаций
возврата в исходное положение или для сохранения новых координат
элемента.
resize)Interact.js поддерживает динамическое изменение размеров элементов с
использованием точек захвата (edges) или внутренних
контролов:
resizestart – инициируется при
начале изменения размеров. Позволяет определить начальные размеры
элемента и подготовить визуальные индикаторы.
resizemove – основное событие
изменения размеров. Объект события предоставляет:
event.deltaRect – изменение размеров в текущем
кадре.event.rect.width/height – новые размеры элемента.event.edges – объект
{top, left, bottom, right}, показывающий активные границы
изменения.Пример изменения размеров через трансформацию:
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
y = parseFloat(y) || 0
event.target.style.width = `${event.rect.width}px`
event.target.style.height = `${event.rect.height}px`
x += event.deltaRect.left
y += event.deltaRect.top
event.target.style.transform = `translate(${x}px, ${y}px)`
event.target.dataset.x = x
event.target.dataset.y = y
}
}
})resizeend – срабатывает после
завершения изменения размеров. Часто используется для фиксации новых
размеров в базе данных или для запуска дополнительных эффектов.
gesture)Interact.js поддерживает масштабирование и вращение с помощью нескольких касаний:
gesturestart – событие начала
жеста. Содержит информацию о первоначальном расстоянии между пальцами и
угле поворота.
gesturemove – срабатывает при
изменении масштаба или поворота. Ключевые свойства:
event.scale – коэффициент масштабирования.event.rotation – угол поворота в градусах.event.clientX/Y – координаты центра жеста.Пример применения масштабирования и вращения:
interact('.gesture')
.gesturable({
listeners: {
move (event) {
const scale = (parseFloat(event.target.dataset.scale) || 1) * event.scale
const angle = (parseFloat(event.target.dataset.angle) || 0) + event.rotation
event.target.style.transform =
`scale(${scale}) rotate(${angle}deg)`
event.target.dataset.scale = scale
event.target.dataset.angle = angle
}
}
})gestureend – завершение жеста.
Позволяет сохранять окончательные значения масштаба и поворота.
event.stopPropagation() работает аналогично стандартным
событиям DOM.event.preventDefault() позволяет отключить стандартное
поведение браузера при жестах.event.originalEvent содержит исходное событие мыши или
касания для более детальной обработки.left и top элемента,
что позволяет сохранять плавность анимаций через
transform: translate(...).Interact.js позволяет задавать зоны, где события активны, через селекторы и область действия:
interact(selector).draggable({}) — ограничение области
перетаскивания.interact(selector).resizable({ edges: {...} }) —
настройка точек изменения размеров.restrict, inertia и
snap позволяют добавлять физические ограничения и эффекты
движения.Эта система событий образует основу для реализации сложных интерфейсов, включая панели, плитки, интерактивные карты и редакторы визуальных объектов. Сочетание drag, resize и gesture событий позволяет создавать полноценные элементы с динамическим откликом на действия пользователя, управляемые полностью через JavaScript.