Interact.js предоставляет мощные возможности для управления интерактивными действиями, такими как перетаскивание, масштабирование и вращение элементов. Одной из ключевых особенностей является поддержка инерции, которая позволяет объектам плавно продолжать движение после завершения пользовательского взаимодействия, создавая естественные физические эффекты.
В Interact.js инерция настраивается через объект
inertia, передаваемый при инициализации
draggable, gesturable или
resizable. Основные свойства:
enabled (boolean) — включает или отключает инерцию.
inertia: { enabled: true }
Если значение false, объект мгновенно останавливается
после отпускания мыши или пальца.
resistance (number) — коэффициент сопротивления, влияющий на скорость замедления объекта.
inertia: { resistance: 8 }minSpeed (number, px/s) — минимальная скорость, при которой инерция всё ещё применяется. Объект с меньшей скоростью мгновенно останавливается без скольжения.
inertia: { minSpeed: 100 }endSpeed (number, px/s) — скорость, с которой инерция считается завершённой. Позволяет контролировать, насколько плавно объект замедляется к полной остановке.
inertia: { endSpeed: 10 }allowResume (boolean) — определяет, может ли объект продолжить движение при повторном захвате во время инерции.
inertia: { allowResume: true }interact('.draggable')
.draggable({
inertia: {
enabled: true,
resistance: 10,
minSpeed: 200,
endSpeed: 20
},
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
],
listeners: {
move(event) {
const { target, dx, dy } = event;
const x = (parseFloat(target.getAttribute('data-x')) || 0) + dx;
const y = (parseFloat(target.getAttribute('data-y')) || 0) + dy;
target.style.transform = `translate(${x}px, ${y}px)`;
target.setAttribute('data-x', x);
target.setAttribute('data-y', y);
}
}
});
В этом примере объект продолжает движение после отпускания мыши,
постепенно замедляясь в соответствии с resistance,
minSpeed и endSpeed.
Для элементов, которые поддерживают gestures, инерция может применяться к масштабированию:
interact('.scalable')
.gesturable({
inertia: {
enabled: true,
resistance: 8,
minSpeed: 0.05,
endSpeed: 0.01
},
listeners: {
move(event) {
const scale = (parseFloat(event.target.getAttribute('data-scale')) || 1) * (1 + event.ds);
event.target.style.transform = `scale(${scale})`;
event.target.setAttribute('data-scale', scale);
}
}
});
Здесь ds — относительное изменение масштаба между
кадрами жеста, а инерция обеспечивает плавное завершение
масштабирования, если жест выполнен быстро.
resistance: 5–8) для
более «плавного» скольжения пальцем.resistance
(10–20) для более контролируемого эффекта при использовании
мыши.minSpeed) должна
подбираться с учётом размера и массы объекта: тяжелые
объекты останавливаются быстрее, легкие — скользят дольше.Interact.js позволяет комбинировать инерцию с модификаторами, такими как:
restrictRect — ограничение движения внутри
контейнера.snap — притягивание к сетке или координатам.Пример: объект скользит по инерции, но останавливается на границе контейнера:
interact('.draggable')
.draggable({
inertia: { enabled: true, resistance: 12 },
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
]
});
endOnly: true гарантирует, что ограничения применяются
только в конце инерции, а не на каждом кадре.
translate, scale, rotate)
позволяет создавать реалистичные эффекты инерции.Понимание и точная настройка параметров инерции в Interact.js позволяет создавать интерфейсы с естественным и отзывчивым поведением объектов, повышая интерактивность и комфорт взаимодействия.