GSAP (GreenSock Animation Platform) — это мощная библиотека для создания сложных анимаций в JavaScript. Одним из ключевых аспектов работы с анимацией является управление начальными и конечными позициями объектов. Эти позиции определяют путь, по которому движется элемент, и позволяют создавать плавные, точные и динамичные анимации.
Начальная позиция задается через текущее состояние элемента или явно
через свойства from. Конечная позиция определяется через
свойства to объекта анимации. Например:
gsap.to(".box", {
x: 300,
y: 150,
duration: 2
});
В этом примере элемент с классом .box перемещается
от текущей позиции до координат (300, 150)
за 2 секунды.
Для явного указания начальной позиции используется метод
from:
gsap.from(".box", {
x: -200,
y: 0,
duration: 2
});
Здесь объект стартует с координаты x = -200 и постепенно
движется к текущему состоянию на странице.
fromTo
для точного контроляМетод fromTo позволяет одновременно задавать начальное и
конечное состояние объекта:
gsap.fromTo(".box",
{ x: 0, y: 0 },
{ x: 400, y: 200, duration: 3 }
);
Преимущество fromTo в том, что не требуется
зависеть от текущего состояния элемента — анимация всегда
начинается и заканчивается строго там, где указано.
GSAP поддерживает анимации по кривым через
motionPathPlugin. Можно задавать точные начальные и
конечные позиции для сложных траекторий. Пример:
gsap.registerPlugin(MotionPathPlugin);
gsap.to(".circle", {
duration: 4,
motionPath: {
path: [{x: 0, y: 0}, {x: 200, y: 100}, {x: 400, y: 0}],
curviness: 1.5
}
});
В этом случае объект движется по сложной кривой с точными координатами начальной и конечной точек. Curviness позволяет контролировать плавность изгиба траектории.
Начальные и конечные позиции можно задавать относительно текущего
состояния с помощью символов += или -=:
gsap.to(".box", { x: "+=100", y: "-=50", duration: 1.5 });
Такой подход удобен, когда элемент должен двигаться относительно своей текущей позиции, а не по фиксированным координатам.
Для точного контроля движения важно учитывать
transformOrigin и тип позиционирования
(absolute, relative, fixed).
Позиция объекта при анимации рассчитывается исходя из этих свойств.
Например, при вращении вокруг центра:
gsap.to(".box", { rotation: 360, transformOrigin: "50% 50%", duration: 2 });
Начальная и конечная позиции можно комбинировать с delay
и stagger для создания цепочек анимаций:
gsap.to(".box", {
x: 300,
y: 100,
duration: 1,
delay: 0.5,
stagger: 0.2
});
Каждый элемент последовательно начинает движение через 0.2 секунды, а сама анимация стартует через 0.5 секунды после вызова.
Easing влияет на восприятие движения между начальной и конечной точками. Например, линейная анимация:
gsap.to(".box", { x: 400, duration: 2, ease: "linear" });
Или с эффектом замедления в начале и ускорения в конце:
gsap.to(".box", { x: 400, duration: 2, ease: "power2.inOut" });
Easing позволяет задавать не только положение, но и динамику движения между начальными и конечными координатами.
GSAP позволяет использовать функции для вычисления начальных и конечных позиций в реальном времени:
gsap.to(".box", {
x: () => window.innerWidth / 2,
y: () => Math.random() * 300,
duration: 2
});
Это особенно полезно для анимаций, где начальные или конечные позиции зависят от размеров окна или состояния страницы.