Interact.js предоставляет возможность расширенного управления пользовательским взаимодействием с элементами DOM через события drag, resize, gesturable. Помимо стандартных подходов, таких как перетаскивание и изменение размеров, библиотека поддерживает альтернативные способы взаимодействия, которые позволяют создавать более гибкие интерфейсы.
Помимо автоматической привязки событий к элементам с помощью
interact(target).draggable(), можно реализовать
перетаскивание программно, контролируя положение
элемента через обновление CSS-свойств или атрибутов
transform. Это особенно полезно для интеграции с другими
библиотеками или нестандартными UI-компонентами.
Пример программного управления:
let posX = 0, posY = 0;
interact('.draggable').draggable({
listeners: {
move(event) {
posX += event.dx;
posY += event.dy;
event.target.style.transform = `translate(${posX}px, ${posY}px)`;
}
}
});
В этом случае можно внедрять логику ограничений, сетки или
адаптивного поведения без привязки к стандартным событиям
dragstart, dragmove, dragend.
Snap и restrict позволяют задавать альтернативные пути перемещения элементов. Snap фиксирует объект относительно определённых координат, сетки или линий, создавая ощущение «магнита». Restrict ограничивает перемещение рамками контейнера, области экрана или произвольными правилами.
interact('.draggable')
.draggable({
modifiers: [
interact.modifiers.snap({
targets: [
interact.snappers.grid({ x: 50, y: 50 })
],
range: 30,
relativePoints: [{ x: 0, y: 0 }]
}),
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
]
});
Ключевой момент: комбинирование snap и restrict позволяет создавать альтернативные схемы перемещения, например, движение только по диагонали, фиксированные шаги или ограниченные зоны взаимодействия.
Interact.js поддерживает события gesturable, которые отслеживают вращение, масштабирование и комбинированные жесты на сенсорных устройствах. В отличие от стандартного drag, gesturable позволяет создавать альтернативные способы взаимодействия, где элемент реагирует на две точки касания или щипки, а не на простое перетаскивание.
interact('.resizable')
.gesturable({
listeners: {
move(event) {
let scale = (event.scale - 1) * 2 + 1; // увеличение с учётом начального масштаба
event.target.style.transform =
`scale(${scale}) rotate(${event.rotation}deg)`;
}
}
});
Использование gesturable позволяет реализовать такие эффекты, как поворот объектов, увеличение изображений и комбинированное перемещение и трансформацию без дублирования кода.
Interact.js позволяет подписываться на низкоуровневые события и создавать виртуальные взаимодействия. Например, можно симулировать drag события через таймеры, автоматические анимации или взаимодействие с клавиатурой, что создаёт альтернативные сценарии управления.
Пример виртуального перемещения через событие:
const target = document.querySelector('.draggable');
function simulateDrag(dx, dy) {
target.dispatchEvent(new CustomEvent('interact-move', {
detail: { dx, dy }
}));
}
interact(target)
.on('interact-move', event => {
let currentX = parseFloat(target.dataset.x) || 0;
let currentY = parseFloat(target.dataset.y) || 0;
currentX += event.detail.dx;
currentY += event.detail.dy;
target.style.transform = `translate(${currentX}px, ${currentY}px)`;
target.dataset.x = currentX;
target.dataset.y = currentY;
});
Библиотека поддерживает работу с мышью, касаниями и стилусом, а также позволяет создавать собственные адаптеры ввода. Это открывает возможность альтернативного управления объектами через клавиши, сенсорные панели или нестандартные контроллеры.
Пример ограниченного клавиатурного перемещения:
const step = 10;
const el = document.querySelector('.draggable');
document.addEventListener('keydown', e => {
let x = parseFloat(el.dataset.x) || 0;
let y = parseFloat(el.dataset.y) || 0;
if(e.key === 'ArrowUp') y -= step;
if(e.key === 'ArrowDown') y += step;
if(e.key === 'ArrowLeft') x -= step;
if(e.key === 'ArrowRight') x += step;
el.style.transform = `translate(${x}px, ${y}px)`;
el.dataset.x = x;
el.dataset.y = y;
});
Создание сложных интерфейсов часто требует сочетания различных способов взаимодействия. Interact.js позволяет комбинировать события:
Такой подход обеспечивает альтернативные сценарии управления, которые адаптируются под устройства и контекст использования.
Interact.js предоставляет гибкие модификаторы:
Эти модификаторы позволяют создавать интерфейсы, где перемещение и масштабирование происходят по альтернативным правилам, повышая UX и контроль над элементами.
Можно глубоко управлять взаимодействиями через события, модификаторы и программное управление, что делает Interact.js мощным инструментом для реализации нестандартных сценариев в веб-интерфейсах.