GSAP (GreenSock Animation Platform) предоставляет мощные инструменты для работы с анимацией и интерактивностью в браузере. Одним из ключевых модулей является Draggable, который позволяет управлять элементами с помощью мыши или сенсорного ввода. Для тонкой настройки поведения элементов при перетаскивании используются события onDrag, onDragStart и onDragEnd.
Событие onDragStart срабатывает в момент начала перетаскивания элемента. На этом этапе можно:
Пример использования:
Draggable.create("#box", {
type: "x,y",
onDragStart: function() {
console.log("Начало перетаскивания:", this.target);
this.target.style.boxShadow = "0 10px 20px rgba(0,0,0,0.3)";
}
});
Особенности:
this.target — ссылка на DOM-элемент, который
перетаскивается.this.startX и this.startY — координаты
начала перетаскивания.onDragStart позволяет плавно изменять состояние элемента
при начале перетаскивания.Событие onDrag вызывается каждый раз, когда элемент изменяет своё положение во время перетаскивания. Оно идеально подходит для:
Пример использования:
Draggable.create("#box", {
type: "x,y",
onDrag: function() {
console.log("Текущее положение:", this.x, this.y);
// Ограничение движения по оси X
if (this.x < 0) this.x = 0;
if (this.x > 500) this.x = 500;
}
});
Особенности:
onDrag могут снижать производительность.this.x и this.y отражают текущие
координаты относительно исходного положения.Событие onDragEnd срабатывает в момент отпускания элемента. Оно используется для:
onDragStart.Пример использования:
Draggable.create("#box", {
type: "x,y",
onDragEnd: function() {
console.log("Перетаскивание завершено");
gsap.to(this.target, {boxShadow: "0 0 0 rgba(0,0,0,0)", duration: 0.3});
// Возврат к исходной позиции
gsap.to(this.target, {x: 0, y: 0, duration: 0.5, ease: "power2.out"});
}
});
Особенности:
onDrag: не
выполнять сложные вычисления внутри события, вместо этого хранить
координаты и обновлять анимацию с помощью gsap.ticker.this.startX, this.startY, this.x,
this.y для корректного расчёта анимаций и ограничений.onDragStart → onDrag → onDragEnd,
чтобы обеспечить плавный визуальный эффект и контроль поведения
элемента.style возможно, но
использование gsap.to() обеспечивает плавность и
согласованность с другими анимациями.snap
можно автоматически привязывать элемент к сетке или определённым
координатам.onDrag
может управлять анимациями соседних объектов, создавая сложные
интерактивные интерфейсы.Пример snap-позиции:
Draggable.create("#box", {
type: "x,y",
inertia: true,
snap: {
x: function(endValue) {
return Math.round(endValue / 100) * 100;
},
y: function(endValue) {
return Math.round(endValue / 100) * 100;
}
}
});
Использование событий drag вместе с
snap и inertia позволяет создавать динамичные
и отзывчивые интерфейсы с минимальными усилиями, обеспечивая
естественные движения и точное позиционирование элементов.