Interact.js предоставляет возможность обрабатывать как мышиные, так и
сенсорные события, что особенно важно для мобильных браузеров. В отличие
от десктопных, мобильные устройства используют события
touchstart, touchmove и touchend,
которые отличаются от mousedown, mousemove и
mouseup по нескольким параметрам:
gesture и pinch.preventDefault.touches, что требует явного выбора нужного касания
для вычисления позиции объекта.Пример обработки перетаскивания на мобильных устройствах:
interact('.draggable')
.draggable({
listeners: {
start (event) {
console.log('Начало перетаскивания', event.touches);
},
move (event) {
event.target.style.transform =
`translate(${event.pageX}px, ${event.pageY}px)`;
}
},
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
],
inertia: true
});
Мобильные браузеры обладают ограниченными ресурсами, поэтому важно использовать возможности Interact.js экономно:
listeners.move.translate3d снижает нагрузку на рендеринг GPU по сравнению
с изменением top/left.Interact.js предоставляет набор модулей для работы с перетаскиванием, ресайзингом и жестами. В мобильных браузерах это особенно полезно для реализации интерфейсов с минимальным кодом:
Пример одновременного использования нескольких модулей:
interact('.interactive')
.draggable({
inertia: true,
modifiers: [interact.modifiers.restrictRect({ restriction: 'parent' })]
})
.resizable({
edges: { left: true, right: true, bottom: true, top: true },
inertia: true
})
.gesturable({
listeners: {
move(event) {
const scale = event.scale;
const rotation = event.rotation;
event.target.style.transform =
`scale(${scale}) rotate(${rotation}deg)`;
}
}
});
Мобильные браузеры имеют отличия в работе событий и рендеринга, на которые Interact.js реагирует через универсальный API:
touch и pointer
событиями.preventDefault на сенсорных событиях,
чтобы избежать нежелательной прокрутки страницы.restrict и snap
для точного позиционирования объектов на мобильных устройствах.inertia с осторожностью, учитывая разную
производительность устройств.touch и pointer событий может
различаться даже между версиями одного движка.Interact.js легко сочетается с популярными фронтенд-фреймворками:
ref и обновляют стили напрямую при событии
move.GSAP или Anime.js позволяет создавать плавные
эффекты инерции и реакции на жесты.Interact.js предоставляет комплексный API для работы с мультитач:
start,
move и end.Пример масштабирования и вращения:
interact('.pinchable')
.gesturable({
listeners: {
start(event) {
event.target.dataset.scale = 1;
event.target.dataset.rotation = 0;
},
move(event) {
const scale = parseFloat(event.target.dataset.scale) * event.scale;
const rotation = parseFloat(event.target.dataset.rotation) + event.rotation;
event.target.style.transform = `scale(${scale}) rotate(${rotation}deg)`;
},
end(event) {
event.target.dataset.scale = parseFloat(event.target.dataset.scale) * event.scale;
event.target.dataset.rotation = parseFloat(event.target.dataset.rotation) + event.rotation;
}
}
});
Этот набор возможностей делает Interact.js мощным инструментом для создания интерактивных элементов в мобильных браузерах с высокой отзывчивостью, корректной обработкой мультитач и гибкими ограничениями по позиционированию и анимации.