Interact.js поддерживает работу с pointer events, что открывает широкие возможности для управления взаимодействием с элементами веб-страницы. Pointer events объединяют события мыши, касания и стилуса в единый API, обеспечивая единообразное и предсказуемое поведение при взаимодействии с интерфейсом.
Реализация pointer events позволяет:
pointerdown, pointermove,
pointerup), что значительно упрощает код.mousedown, touchstart,
touchmove, touchend) и условных проверок для
разных устройств.Пример привязки обработчика с использованием pointer events в Interact.js:
interact('.draggable')
.draggable({
listeners: {
start (event) {
console.log('Начало перетаскивания', event.pointerType);
},
move (event) {
event.target.style.transform = `translate(${event.dx}px, ${event.dy}px)`;
},
end (event) {
console.log('Перетаскивание завершено');
}
}
});
Здесь event.pointerType указывает источник ввода:
mouse, touch или pen, что
позволяет создавать условную логику при необходимости.
Pointer events обеспечивают:
interact('.pressure-sensitive')
.on('pointermove', event => {
console.log(`Давление: ${event.pressure}, X: ${event.clientX}, Y: ${event.clientY}`);
});
Это особенно полезно для приложений, связанных с рисованием, редактированием графики или симуляцией естественных жестов.
Pointer events поддерживают мультикасания и работу с несколькими указателями одновременно:
pointerId, что
позволяет отслеживать движение нескольких пальцев или стилусов
одновременно.Пример обработки двух касаний для масштабирования элемента:
const pointers = new Map();
interact('.scalable')
.on('pointerdown', event => pointers.set(event.pointerId, event))
.on('pointermove', event => {
if (pointers.size === 2) {
const [first, second] = Array.from(pointers.values());
const dist = Math.hypot(second.clientX - first.clientX, second.clientY - first.clientY);
event.target.style.transform = `scale(${dist / 100})`;
}
})
.on('pointerup', event => pointers.delete(event.pointerId));
Использование pointer events упрощает работу с разными браузерами:
touch или
mouse отдельно.Interact.js расширяет стандартные pointer events дополнительными возможностями:
Пример с ограничением перемещения элемента и включенной инерцией:
interact('.draggable')
.draggable({
inertia: true,
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
],
listeners: { move: dragMoveListener }
});
function dragMoveListener (event) {
const { x = 0, y = 0 } = event.target.dataset;
const dx = event.dx, dy = event.dy;
event.target.style.transform = `translate(${x + dx}px, ${y + dy}px)`;
event.target.dataset.x = x + dx;
event.target.dataset.y = y + dy;
}
Pointer events формируют фундамент гибкой и современной интерактивности, делая Interact.js мощным инструментом для сложных веб-интерфейсов.