Объект action в библиотеке Interact.js отвечает за
управление поведением интерактивных элементов при выполнении таких
действий, как drag, resize и
gesture. Он является ключевым компонентом,
определяющим, как именно элемент будет реагировать на пользовательские
события.
В Interact.js каждый интерактивный объект (interactable)
может быть настроен на выполнение определённых действий через методы
.draggable(), .resizable() и
.gesturable(). За обработку этих действий отвечает
внутренний объект action, который хранит текущее состояние
взаимодействия и параметры поведения.
actionОсновные свойства объекта action:
name – строка, указывающая тип
действия ('drag', 'resize' или
'gesture').
axis – ограничение движения по осям
('x', 'y' или 'xy').
edges – объект, содержащий
информацию о границах для ресайза. Например:
edges: { top: true, left: false, bottom: false, right: true }rect – текущий прямоугольник
элемента (getBoundingClientRect()), используемый для
расчёта перемещений и ограничений.
prepared – внутренний флаг,
указывающий, что действие готово к исполнению.
starting – данные о начальной
позиции действия, включая координаты и размеры элемента.
delta – объект, содержащий
изменения по осям x и y за текущий шаг
взаимодействия.
pointer – координаты указателя
(мышь, тач), связанные с действием.
Эти свойства позволяют точно отслеживать текущее состояние интерактивного процесса и корректно применять ограничения и трансформации.
actionХотя большинство взаимодействий с action осуществляется
через события Interact.js (onmove, onstart,
onend), объект предоставляет внутренние методы для
управления состоянием действия:
start – инициализация действия на
элементе. Заполняет starting, rect и другие
ключевые свойства.update – пересчёт текущих координат и
изменения положения элемента на основе движения указателя.stop – завершение действия, очистка
временных данных и возврат объекта в состояние ожидания.clone – создание копии текущего
состояния действия, используется для сложных сценариев с анимацией или
отменой.Прямое использование этих методов встречается редко, но понимание их работы важно для настройки кастомного поведения.
interactableКаждое действие привязано к интерактивному элементу через объект
interactable. Взаимодействие выглядит следующим
образом:
interact('.draggable')
.draggable({
onstart(event) {
const action = event.interaction.action;
console.log(action.name); // 'drag'
console.log(action.starting); // начальные координаты
},
onmove(event) {
const action = event.interaction.action;
action.delta.x += event.dx;
action.delta.y += event.dy;
},
onend(event) {
const action = event.interaction.action;
console.log('Действие завершено', action.delta);
}
});
В этом примере action позволяет получить доступ к
текущему типу действия, начальной позиции и изменениям по осям.
Использование action делает возможным реализацию сложных
сценариев, таких как ограничение движения по сетке,
динамическое изменение размеров и
комбинированные жесты.
actionОбъект action тесно связан с ограничениями
(modifiers) в Interact.js. Например, при ресайзе элемента
можно задать модификаторы, которые будут учитывать
action.edges и action.rect:
interact('.resizable')
.resizable({
edges: { left: true, right: true, bottom: true, top: true },
modifiers: [
interact.modifiers.restrictSize({
min: { width: 100, height: 50 },
max: { width: 500, height: 300 }
})
],
onmove(event) {
const action = event.interaction.action;
// Применение изменений по координатам
event.target.style.width = `${action.rect.width + action.delta.x}px`;
event.target.style.height = `${action.rect.height + action.delta.y}px`;
}
});
Здесь action.rect и action.delta
используются для вычисления новых размеров элемента с учётом
ограничений, заданных модификатором.
Interact.js позволяет создавать кастомные действия через объект
actions. Каждый новый тип действия регистрируется с
помощью:
interact.actions.register({
name: 'custom',
defaults: { axis: 'xy' },
// методы для start, move, end
});
Внутри этих методов можно полностью управлять объектом
action, задавать уникальные свойства и обновлять состояние
элемента при движении указателя. Это открывает возможность реализации
нестандартных интерактивных сценариев, которые не покрываются
стандартными drag, resize и
gesture.
actionaction.starting используется для корректного расчёта всех
изменений.delta для перемещений:
все сдвиги и изменения размеров должны применяться относительно
delta, чтобы не нарушать плавность анимации.name действия: для
элементов, поддерживающих несколько действий одновременно, важно
различать тип текущего действия.modifiers:
объект action предоставляет актуальные данные для работы с
ограничениями по сетке, границам контейнера или минимальным/максимальным
размерам.Объект action является сердцем управления
интерактивностью в Interact.js. Понимание его структуры и методов
позволяет создавать гибкие и точные интерфейсы с поддержкой сложных
жестов, кастомных сценариев и плавных анимаций.