Библиотека Interact.js предоставляет мощный и гибкий
механизм для работы с интерактивными элементами на веб-странице. Одними
из ключевых событий, определяющих жизненный цикл взаимодействия с
элементом, являются start, move и
end. Они позволяют отслеживать начало, процесс и завершение
действий пользователя, таких как перетаскивание, масштабирование или
вращение элементов.
startСобытие start срабатывает в момент начала взаимодействия
с элементом. Для элементов, поддерживающих drag, resize или gesturing,
это первое событие в цепочке.
Пример использования:
interact('.draggable')
.draggable({
listeners: {
start(event) {
console.log('Начало перетаскивания', event.target);
event.target.style.border = '2px solid blue';
}
}
});
Ключевые моменты события start:
event.target — элемент, с которым начинается
взаимодействие.event.clientX и event.clientY — координаты
указателя в момент начала.moveСобытие move срабатывает при каждом перемещении курсора
или пальца пользователя во время взаимодействия. Оно позволяет
реализовать динамическое перемещение или изменение элементов в реальном
времени.
Пример использования:
interact('.draggable')
.draggable({
listeners: {
move(event) {
const target = event.target;
const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
const 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);
}
}
});
Особенности события move:
event.dx и event.dy — смещения элемента
относительно предыдущего события, а не от начальной позиции.endСобытие end срабатывает после завершения взаимодействия,
когда пользователь отпускает элемент или прекращает жест. Оно позволяет
завершить процесс, сохранить финальное состояние или инициировать
дополнительные действия.
Пример использования:
interact('.draggable')
.draggable({
listeners: {
end(event) {
console.log('Перетаскивание завершено', event.target);
event.target.style.border = '';
}
}
});
Особенности события end:
start и move.event.pageX и event.pageY содержат
финальные координаты указателя на момент завершения.Для комплексных взаимодействий события start,
move и end обычно применяются совместно, чтобы
создать полноценный цикл взаимодействия. Это позволяет:
start.move.end.Пример комплексного использования:
interact('.draggable')
.draggable({
listeners: {
start(event) {
event.target.style.opacity = 0.7;
},
move(event) {
const target = event.target;
const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
const 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);
},
end(event) {
event.target.style.opacity = 1;
}
}
});
move могут срабатывать десятки раз в секунду, поэтому любые
тяжелые вычисления лучше минимизировать.draggable, resizable и
gesturable, но обработчики должны корректно работать с
различными типами событий.data-* атрибутах помогает
избегать глобальных переменных и упрощает управление состоянием
элементов.start и их удаление в end
обеспечивает визуальную обратную связь пользователю.События start, move и end
являются фундаментальными для построения интерактивных интерфейсов с
помощью Interact.js, обеспечивая полный контроль над жизненным циклом
пользовательского взаимодействия с элементами.