Параметр allowResume управляет
поведением объектов при прерывании и возобновлении интерактивных
действий, таких как drag, resize и
gesturable. Его основной функцией является определение
того, можно ли возобновить действие с точки, на которой оно было
остановлено, или действие должно начаться заново с исходного
состояния.
В Interact.js allowResume применяется как на уровне
глобальных настроек, так и для отдельных
элементов через методы .draggable(),
.resizable() и .gesturable().
interact('.draggable')
.draggable({
allowResume: true,
listeners: {
start (event) { console.log('Начало:', event) },
move (event) { console.log('Движение:', event) },
end (event) { console.log('Конец:', event) }
}
});
При allowResume: true элемент будет сохранять
состояние между событиями, и при повторном захвате курсора
интерактивное действие продолжится с текущей позиции, а не сбросится к
исходной.
Interact.js фиксирует прерывание действий через внутренние
события, такие как interruption или когда
пользователь отпускает мышь/палец. Если allowResume
отключен, повторное начало действия всегда инициируется с
исходной позиции.
Пример:
interact('.draggable')
.draggable({
allowResume: false,
inertia: true
});
Здесь, даже если элемент был перетащен и пользователь снова нажал на
него, drag начнется с исходной позиции. При включенном
allowResume объект продолжит движение с текущих
координат.
Параметр inertia тесно связан с
allowResume. Инерция позволяет элементу продолжать
движение после отпускания курсора, имитируя физический
эффект.
allowResume: true, объект может
возобновить инерцию, сохраняя скорость и
направление.allowResume: false, объект сбрасывает
инерцию, и при новом захвате движение начинается заново.interact('.draggable')
.draggable({
inertia: {
resistance: 16,
minSpeed: 100,
endSpeed: 10
},
allowResume: true
});
Это позволяет создавать естественные анимации и плавное продолжение движения.
snap) и ограничениями
(restrict)При использовании snap или restrict
поведение allowResume также важно:
interact('.draggable')
.draggable({
allowResume: true,
modifiers: [
interact.modifiers.snap({ targets: [interact.snappers.grid({ x: 50, y: 50 })] }),
interact.modifiers.restrictRect({ restriction: 'parent' })
]
});
Использование allowResume в сочетании с модификаторами
обеспечивает плавное и предсказуемое поведение при
перетаскивании элементов.
let isPaused = false;
interact('.draggable')
.draggable({
allowResume: true,
listeners: {
move (event) {
if (!isPaused) {
event.target.style.transform = `translate(${event.pageX}px, ${event.pageY}px)`;
}
}
}
});
// Позднее можно временно остановить движение
isPaused = true;
// И возобновить без сброса позиции
isPaused = false;
interact('.resizable')
.resizable({
allowResume: true,
edges: { left: true, right: true, bottom: true, top: true },
listeners: {
move (event) {
let { x, y } = event.target.dataset;
x = (parseFloat(x) || 0) + event.deltaRect.left;
y = (parseFloat(y) || 0) + event.deltaRect.top;
Object.assign(event.target.style, {
width: `${event.rect.width}px`,
height: `${event.rect.height}px`,
transform: `translate(${x}px, ${y}px)`
});
Object.assign(event.target.dataset, { x, y });
}
}
});
В этом примере объект может быть продолжен с текущих размеров и позиции, что делает интерфейс более отзывчивым.
allowResume не сохраняет события между
сессиями. Если страница обновляется, состояние
сбрасывается.inertia требует тщательной настройки
параметров сопротивления и минимальной скорости, чтобы
движение выглядело естественно.allowResume.allowResume улучшает UX, позволяя пользователю
остановить и продолжить действия без потери
состояния.