В Interact.js объект delta играет
ключевую роль при отслеживании перемещений и изменений элементов на
странице. Он представляет собой разницу координат между
текущим и предыдущим состоянием события, что позволяет точно
рассчитывать смещения при перетаскивании, масштабировании или
вращении.
deltaОбъект delta содержит несколько ключевых свойств:
delta.x и delta.y –
изменение позиции по осям X и Y относительно предыдущего события.deltaRect.left, deltaRect.top,
deltaRect.right, deltaRect.bottom –
изменения границ элемента, полезны при работе с ограничениями и
коллизиями.deltaTime – интервал времени между
текущим и предыдущим событием, измеряется в миллисекундах, используется
для вычисления скорости движения.Эти значения не являются абсолютными координатами, они показывают именно разницу между состояниями, что позволяет корректно суммировать изменения и анимации.
delta при drag-and-dropПри перетаскивании элемента delta предоставляет
информацию о том, насколько объект сместился за текущий шаг. Пример
работы:
interact('.draggable').draggable({
listeners: {
move(event) {
let target = event.target;
let x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
let 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);
}
}
});
В этом примере используется event.dx и
event.dy, которые фактически являются компонентами
delta для движения по осям X и Y. Они показывают
изменение позиции за один шаг, а не абсолютную позицию,
что особенно важно при плавной анимации.
delta позволяет легко интегрировать ограничения
перемещения. Например, можно предотвратить выход элемента за
пределы контейнера:
interact('.draggable').draggable({
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
],
listeners: {
move(event) {
let target = event.target;
let x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
let y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
// Проверка на ограничения через deltaRect
const dr = event.deltaRect;
x += dr.left || 0;
y += dr.top || 0;
target.style.transform = `translate(${x}px, ${y}px)`;
target.setAttribute('data-x', x);
target.setAttribute('data-y', y);
}
}
});
Использование deltaRect позволяет учитывать
смещения, вызванные ограничениями, без потери точности
координат.
При масштабировании или вращении с помощью
multi-touch delta показывает изменения в
масштабе и угле поворота:
event.ds – изменение масштаба за
текущий шаг.event.da – изменение угла поворота в
градусах за текущий шаг.Пример интеграции с масштабированием:
interact('.resizable').gesturable({
listeners: {
move(event) {
let 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);
}
}
});
Использование event.ds и event.da
обеспечивает плавное изменение размеров и углов, так
как каждый шаг учитывает только разницу между
событиями, а не абсолютные значения, которые могут
колебаться.
Для сложных взаимодействий с элементами delta используется для накопления изменений:
let totalX = 0, totalY = 0;
interact('.draggable').draggable({
listeners: {
move(event) {
totalX += event.dx;
totalY += event.dy;
event.target.style.transform = `translate(${totalX}px, ${totalY}px)`;
}
}
});
Такой подход гарантирует точность всех перемещений, даже если события приходят с разной частотой или с пропущенными кадрами.
delta всегда локальна для события, не
зависит от начальной позиции элемента.deltaRect часто важнее, чем
dx и dy, так как учитывает взаимодействие с
модификаторами.ds и da позволяют
реализовать плавные анимации без скачков, сохраняя
корректность изменения масштаба и поворота.Использование delta — это фундамент для точного
управления динамикой элементов. Оно обеспечивает
согласованность координат, плавность анимаций и корректное
применение ограничений, что делает Interact.js мощным
инструментом для интерактивных интерфейсов.