Библиотека Interact.js предоставляет ряд вспомогательных утилит, которые существенно упрощают работу с событиями, координатами и трансформациями элементов на странице. Эти утилиты позволяют реализовывать сложные интерактивные интерфейсы без необходимости писать громоздкий код вручную.
Методы interact.getPointer и
interact.getElementRect позволяют получать координаты
указателя и размеры элементов с учётом любых трансформаций CSS, таких
как scale, rotate или
translate.
Пример получения позиции указателя относительно документа:
interact(document).on('move', function(event) {
const pointer = interact.getPointer(event);
console.log('X:', pointer.x, 'Y:', pointer.y);
});
Метод interact.getElementRect(element) возвращает объект
с координатами верхнего левого угла (top,
left) и размерами (width, height)
элемента.
Взаимодействие с элементами часто требует преобразования координат из
одной системы в другую (например, из локальной в глобальную).
Interact.js предоставляет утилиту interact.relativeCoords
для работы с относительными координатами:
const relative = interact.relativeCoords({ x: 150, y: 100 }, element);
console.log('Относительные координаты:', relative);
Interact.js позволяет объединять несколько событий в один
поток для упрощения логики обработки. Например, с помощью
метода interact.merge можно объединять объекты
трансформаций, получаемых от разных взаимодействий:
const delta1 = { x: 10, y: 5 };
const delta2 = { x: -3, y: 7 };
const merged = interact.merge(delta1, delta2);
console.log(merged); // { x: 7, y: 12 }
Для фильтрации событий используется метод
interact.filter, который позволяет пропускать только
события, удовлетворяющие заданным условиям:
interact(document).on('dragmove', function(event) {
if (interact.filter(event, el => el.tagName === 'DIV')) {
console.log('Драг по DIV:', event.target);
}
});
Interact.js предлагает набор функций для упрощённого управления CSS-трансформациями, включая смещения, вращение и масштабирование.
Функция interact.setTransform позволяет устанавливать
комбинации трансформаций на элемент:
interact.setTransform(element, {
translate: { x: 50, y: 100 },
scale: { x: 1.2, y: 1.2 },
rotate: 45
});
Метод interact.getTransform возвращает объект с текущими
значениями всех трансформаций для элемента:
const transform = interact.getTransform(element);
console.log(transform.translate.x, transform.scale.x, transform.rotate);
Для реализации интерфейсов с ограничениями движения используются
функции interact.snap и interact.restrict. Они
позволяют привязать элемент к сетке или ограничить его передвижение в
пределах контейнера.
Пример привязки к сетке с шагом 50px:
interact(element).draggable({
modifiers: [
interact.snap({
targets: [interact.createSnapGrid({ x: 50, y: 50 })],
range: Infinity,
relativePoints: [{ x: 0, y: 0 }]
})
]
});
Ограничение перемещения внутри родительского контейнера:
interact(element).draggable({
modifiers: [
interact.restrict({
restriction: 'parent',
endOnly: true
})
]
});
Interact.js включает функции для работы с векторами и углами, которые часто необходимы при расчётах движения и трансформаций:
interact.vectorLength({ x, y }) — вычисляет длину
вектора.interact.angleBetween({ x1, y1 }, { x2, y2 }) —
вычисляет угол между двумя точками.interact.snapToGrid(value, gridSize) — округляет
значение до ближайшего значения сетки.Пример:
const length = interact.vectorLength({ x: 3, y: 4 });
console.log(length); // 5
const angle = interact.angleBetween({ x1: 0, y1: 0 }, { x2: 1, y2: 1 });
console.log(angle); // 45 градусов
Утилита interact.isPointerEvent помогает определить,
является ли объект событием указателя (мышь, сенсор, стилус):
document.addEventListener('pointerdown', function(e) {
if (interact.isPointerEvent(e)) {
console.log('Это событие указателя');
}
});
Методы interact.cloneEvent и
interact.mergeEvents позволяют безопасно копировать или
объединять данные нескольких событий, что важно при сложных
взаимодействиях:
const clone = interact.cloneEvent(event);
const mergedEvent = interact.mergeEvents(event1, event2);
Вспомогательные утилиты Interact.js дают полный контроль над:
Эти функции делают работу с интерактивными элементами более предсказуемой, безопасной и менее трудозатратной, особенно при реализации сложных drag-and-drop интерфейсов и мультитач-взаимодействий.