Библиотека Interact.js предназначена для управления интерактивными событиями на элементах DOM: перемещением, масштабированием, поворотом и перетаскиванием. Центральным понятием является контекст взаимодействия, который обеспечивает отслеживание состояния конкретного взаимодействия пользователя с элементом, включая позицию, движение, касания и ограничения.
Объект Interaction представляет единичное
взаимодействие с элементом. Он создаётся автоматически при начале
события (например, dragstart) и содержит всю информацию о
текущем процессе. Основные свойства:
element — DOM-узел, с которым осуществляется
взаимодействие.
interactionType — тип текущего взаимодействия
(drag, resize, gesture).
pointerType — тип указателя (mouse,
touch, pen).
startCoords, currentCoords,
deltaCoords — координаты взаимодействия:
edges — объект, определяющий активные края при
ресайзе (top, left, bottom,
right).
Пример инициализации взаимодействия:
interact('.draggable')
.draggable({
listeners: {
start(event) {
console.log(event.interaction.startCoords);
},
move(event) {
console.log(event.interaction.deltaCoords);
},
end(event) {
console.log('Interaction ended');
}
}
});
Interact.js структурирует процесс взаимодействия в последовательность этапов:
Interaction.Каждый этап получает объект события (event), содержащий
interaction и все сопутствующие параметры: координаты,
целевой элемент, смещение и метаданные.
Контекст взаимодействия позволяет задавать ограничения и фильтры:
interact('.draggable')
.draggable({
modifiers: [
interact.modifiers.restrictRect({
restriction: '.container',
endOnly: true
})
]
});
interact('.draggable')
.draggable({
modifiers: [
interact.modifiers.snap({
targets: [interact.createSnapGrid({ x: 50, y: 50 })],
range: Infinity,
relativePoints: [{ x: 0, y: 0 }]
})
]
});
interact('.draggable')
.draggable({
inertia: true
});
Эти модификаторы работают на уровне объекта Interaction,
позволяя применять ограничения и эффекты для конкретного взаимодействия
без влияния на другие элементы.
Interact.js поддерживает многопользовательские и
многоточечные взаимодействия. Каждый Interaction
отслеживает отдельный указатель (мышь или палец). Для работы с мультитач
событиями используются:
event.pointers — массив всех активных указателей.interaction.pointerIsDown(pointer) — проверка, активен
ли конкретный указатель.interaction.updatePointer(pointer) — обновление данных
о движении.Пример обработки мультитач жестов:
interact('.gesture-target')
.gesturable({
listeners: {
start(event) {
console.log('Gesture started', event.pointers.length);
},
move(event) {
console.log('Scale:', event.scale, 'Angle:', event.angle);
}
}
});
Каждое взаимодействие создаёт свой контекст, что позволяет одновременно обрабатывать несколько независимых жестов на одном или разных элементах.
Объект Interaction хранит следующие ключевые внутренние
состояния:
interacting — булевое значение, указывающее на
активность взаимодействия.prepared — подготовка взаимодействия, проверка условий
(например, начальное касание).preEnd — состояние перед завершением, используется для
расчёта инерции и ограничения движения.rect — прямоугольник элемента, включая текущее смещение
и размеры.Использование этих состояний важно при реализации сложной логики взаимодействия, например, для динамического изменения ограничений во время движения элемента.
Interact.js позволяет расширять контекст взаимодействия через пользовательские modifiers и actions:
interaction и текущие координаты и возвращают
откорректированные значения.drag,
resize, gesture).Пример кастомного модификатора:
function limitVertical(interaction, coords) {
coords.y = Math.max(0, Math.min(coords.y, 300));
return coords;
}
interact('.draggable')
.draggable({
modifiers: [
{ enabled: true, methods: { set: limitVertical } }
]
});
Такой подход позволяет тонко управлять поведением элементов без изменения глобальных настроек библиотеки.
Контекст взаимодействия тесно связан с DOM:
event.target — элемент, инициировавший событие.event.currentTarget — элемент, к которому прикреплён
слушатель.interaction.element — DOM-узел, на котором происходит
активное взаимодействие.interaction.rect и interaction.coords —
динамически обновляются при изменении позиции и размеров элемента.Эти данные позволяют создавать сложные интерфейсы с динамическим позиционированием и визуальной обратной связью.
Контекст взаимодействия в Interact.js обеспечивает
полный контроль над всеми аспектами интерактивного поведения элемента,
включая координаты, ограничения, мультитач, инерцию и кастомные эффекты.
Глубокое понимание объекта Interaction и его состояний
позволяет реализовать сложные, отзывчивые и предсказуемые
интерфейсы.