Interact.js предоставляет мощный и гибкий API для обработки событий касаний (touch events) в веб-приложениях. Библиотека поддерживает множественные сенсорные точки, жесты и комбинированные события мыши и касания, что делает её идеальной для интерактивных интерфейсов на мобильных устройствах и планшетах.
Interact.js использует следующие ключевые события касания:
tap — короткое прикосновение к
элементу.doubletap — два последовательных
прикосновения.hold — долгий тап, удержание пальца на
элементе.drag — перетаскивание элемента одним
или несколькими пальцами.pinch — жест с двумя пальцами для
масштабирования.rotate — вращение элемента двумя
пальцами.Эти события могут быть привязаны к любому DOM-элементу с помощью
метода interact(target).on(event, handler).
interact('.draggable')
.on('tap', event => {
console.log('Элемент был затронут');
})
.on('doubletap', event => {
console.log('Двойное касание');
});
Interact.js объединяет мышиные и сенсорные события в единый API. Для обработки перетаскивания (drag):
interact('.draggable')
.draggable({
listeners: {
start(event) {
console.log('Начало перетаскивания', event.touches);
},
move(event) {
const target = event.target;
const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
const y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
target.style.transform = `translate(${x}px, ${y}px)`;
target.setAttribute('data-x', x);
target.setAttribute('data-y', y);
},
end(event) {
console.log('Окончание перетаскивания', event.touches);
}
},
inertia: true
});
Ключевой момент — использование
event.touches, который содержит массив
активных точек касания. Для мультитач-перетаскивания можно отслеживать
каждую точку и обрабатывать её отдельно.
Для поддержки мультитач-жестов Interact.js предоставляет gesturable:
interact('.gesture')
.gesturable({
listeners: {
start(event) {
console.log('Начало жеста');
},
move(event) {
const target = event.target;
let scale = (parseFloat(target.getAttribute('data-scale')) || 1) * (1 + event.ds);
let angle = (parseFloat(target.getAttribute('data-angle')) || 0) + event.da;
target.style.transform = `scale(${scale}) rotate(${angle}deg)`;
target.setAttribute('data-scale', scale);
target.setAttribute('data-angle', angle);
},
end(event) {
console.log('Жест завершён');
}
}
});
event.ds — изменение масштаба за
текущий шаг жеста, event.da — изменение
угла. Эти значения позволяют плавно и точно управлять элементами при
мультитаче.
Interact.js позволяет контролировать чувствительность касаний с помощью опций:
touchAction — определяет стратегию
обработки жестов браузером ('none', 'pan-x',
'pan-y', 'manipulation').inertia — добавляет эффект инерции при
завершении перетаскивания.maxPointers и
minPointers — ограничивают количество
одновременных точек касания для события.Пример с ограничением двух пальцев для масштабирования:
interact('.pinchable')
.gesturable({
maxPointers: 2,
minPointers: 2
});
Для интерактивных интерфейсов часто требуется одновременно поддерживать перетаскивание, масштабирование и вращение:
interact('.interactive')
.draggable({ listeners: dragListeners })
.gesturable({ listeners: gestureListeners })
.on('tap', tapHandler)
.on('doubletap', doubleTapHandler);
Interact.js автоматически обрабатывает конфликт между событиями касания, используя внутренние механизмы pointer capture, что позволяет плавно комбинировать мультитач-жесты с перетаскиванием.
События drag, pinch и rotate предоставляют массив
event.touches, где каждая точка имеет
свойства:
identifier — уникальный ID пальца или стилуса.clientX, clientY — координаты точки на
экране.pageX, pageY — координаты относительно
страницы.Это позволяет реализовать сложные мультитач-сценарии, например, одновременное перемещение нескольких объектов или динамическое масштабирование с фиксацией центра касаний.
Для плавной работы на мобильных устройствах следует учитывать:
transform вместо
top/left для перемещения.maxPointers.Interact.js минимизирует нагрузку, автоматически фильтруя лишние события и обрабатывая их через единый pointer API.
Touch-события Interact.js можно комбинировать с обычными событиями мыши и клавиатуры для комплексного управления интерфейсом. Например, drag может срабатывать и мышью, и пальцем, а gesturable — только мультитачем, сохраняя синхронизацию трансформаций элементов на странице.
Такой подход обеспечивает полное управление сенсорным взаимодействием, позволяет создавать интуитивные интерфейсы и гибко настраивать поведение элементов при касаниях, мультитаче и жестах в веб-приложениях.