GSAP (GreenSock Animation Platform) предоставляет мощные инструменты для анимации различных объектов в JavaScript, включая сложные формы SVG и DOM-элементы. В этом разделе рассматриваются основные методы и техники работы с такими объектами, а также практические приёмы для создания плавных и управляемых анимаций.
SVG (Scalable Vector Graphics) позволяет работать с векторной
графикой, где каждая форма описана с помощью путей
(<path>), линий, кривых и полигонов. Анимация сложных
SVG-форм с помощью GSAP требует понимания нескольких ключевых
понятий:
Path Morphing (морфинг путей) Для плавного
перехода между формами используется метод gsap.to() с
атрибутом attr.d:
gsap.to("#shape1", {
duration: 2,
attr: { d: "M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80" },
ease: "power1.inOut"
});
d — атрибут пути SVG.Использование MorphSVGPlugin Этот плагин позволяет автоматически адаптировать пути для морфинга. Пример:
gsap.to("#complexShape", {
duration: 3,
morphSVG: "#targetShape",
ease: "elastic.out(1, 0.5)"
});
Особенности:
Кривые Безье и сложные сегменты пути требуют детальной работы с координатами и контрольными точками:
Квадратичные кривые Управляются с помощью
атрибута Q в SVG. Пример анимации:
gsap.to("#quadCurve", {
duration: 2,
attr: { d: "M10 80 Q 95 10 180 80" },
ease: "power2.inOut"
});Кубические кривые Атрибут C
определяет кривую с двумя контрольными точками. Для плавной анимации
кривые можно менять динамически:
gsap.to("#cubicCurve", {
duration: 2.5,
attr: { d: "M10 80 C 40 10, 65 10, 95 80" },
ease: "sine.inOut"
});Анимация отдельных сегментов Иногда необходимо
анимировать только часть пути. Для этого используется
stroke-dasharray и stroke-dashoffset:
const path = document.querySelector("#pathSegment");
const length = path.getTotalLength();
path.style.strokeDasharray = length;
path.style.strokeDashoffset = length;
gsap.to(path, { strokeDashoffset: 0, duration: 3, ease: "power1.inOut" });
getTotalLength() вычисляет длину пути.GSAP позволяет анимировать не только SVG, но и сложные DOM-структуры:
Трансформации Сложные формы часто требуют комбинации:
x, y — смещение.scale, rotation — масштабирование и
поворот.transformOrigin — точка трансформации.gsap.to("#complexDiv", {
duration: 2,
x: 100,
y: 50,
scale: 1.5,
rotation: 45,
transformOrigin: "center center",
ease: "expo.out"
});Масштабирование и деформация Для сложных форм
DOM можно использовать CSS-свойства clip-path и
border-radius в сочетании с GSAP:
gsap.to("#clipShape", {
duration: 2,
clipPath: "circle(50% at 50% 50%)",
borderRadius: "50%",
ease: "power2.inOut"
});GSAP Timeline (gsap.timeline()) позволяет объединять
несколько анимаций в последовательности:
const tl = gsap.timeline({ defaults: { duration: 1, ease: "power1.inOut" } });
tl.to("#shapeA", { x: 100 })
.to("#shapeA", { rotation: 90 }, "-=0.5") // Перекрытие анимаций
.to("#shapeB", { attr: { d: "M10 10 L90 90" } });
d.stroke-dasharray для эффекта рисования.Эти методы позволяют создавать плавные, реалистичные и управляемые анимации сложных форм в GSAP, что делает библиотеку идеальной для интерактивной графики и веб-анимации высокой сложности.