GSAP (GreenSock Animation Platform) предоставляет мощный и гибкий инструментарий для анимации элементов на веб-странице. Одним из наиболее интересных и визуально впечатляющих применений является анимация объектов вдоль SVG paths. SVG path — это кривые, линии и арки, задающие траекторию движения. Использование их в GSAP позволяет создавать сложные, динамичные и точные анимации, где объект следует строго по заданной форме.
SVG path определяется атрибутом d в элементе
<path>. Этот атрибут содержит последовательность
команд, например:
<svg width="400" height="200">
<path id="myPath" d="M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80" stroke="black" fill="transparent"/>
</svg>
M (move to) — перемещение пера в начальную точку.C (cubic Bezier) — кубическая кривая Безье с двумя
управляющими точками.S (smooth cubic Bezier) — сглаженная кубическая кривая
Безье.L (line to) — прямая линия до указанной точки.Z — замыкание контура.Для анимации объекта вдоль этой траектории необходимо получить длину пути и вычислять положение объекта в зависимости от прогресса анимации.
MotionPathPlugin является специализированным плагином GSAP для работы с траекториями. Он позволяет перемещать элементы по SVG path, задавая поведение, вращение и прогресс.
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/MotionPathPlugin.min.js"></script>
gsap.registerPlugin(MotionPathPlugin);
gsap.to("#myObject", {
duration: 5,
repeat: -1,
motionPath: {
path: "#myPath",
align: "#myPath",
autoRotate: true,
alignOrigin: [0.5, 0.5]
},
ease: "power1.inOut"
});
Ключевые моменты:
path — селектор или объект SVG path.align — элемент, относительно которого выравнивается
объект вдоль пути.autoRotate — автоматически вращает объект по
касательной траектории.alignOrigin — точка привязки элемента при
выравнивании.GSAP позволяет управлять положением объекта вдоль пути через свойство
progress или используя методы progress():
let animation = gsap.to("#myObject", {
duration: 5,
motionPath: {
path: "#myPath",
align: "#myPath",
autoRotate: true
},
paused: true
});
// Переместить объект на середину пути
animation.progress(0.5);
progress принимает значение от 0 до 1, где 0 — начало
пути, 1 — конец.
Для нескольких объектов можно использовать один путь с разными смещениями и разными скоростями:
gsap.utils.toArray(".dot").forEach((dot, i) => {
gsap.to(dot, {
duration: 5 + i,
repeat: -1,
motionPath: {
path: "#myPath",
align: "#myPath",
autoRotate: true,
alignOrigin: [0.5, 0.5]
},
ease: "linear"
});
});
Это позволяет создать эффект движения объектов с разной фазой, что особенно полезно для анимаций вроде следования за траекторией или создания орбитальных систем.
MotionPathPlugin поддерживает обновление пути в процессе
анимации. Если атрибут d у
<path> изменяется, объект будет следовать новой форме
траектории при следующем кадре:
gsap.to("#myPath", {
duration: 3,
attr: { d: "M10 80 Q 95 10 180 80" } // Квадратичная кривая Безье
});
Анимация объектов, привязанных к пути, обновится автоматически, если
используется align.
Для точной настройки движения можно использовать свойства:
start: стартовая позиция на пути (0–1)end: конечная позиция на пути (0–1)curviness: степень сглаживания при сложных траекториях
(для Bezier-путей)gsap.to("#myObject", {
duration: 4,
motionPath: {
path: "#myPath",
align: "#myPath",
autoRotate: true,
start: 0.2,
end: 0.8
}
});
autoRotate помогает создавать реалистичное движение
объектов, таких как машины, самолёты или стрелки.timeline, что позволяет комбинировать анимации
вдоль разных траекторий.GSAP с MotionPathPlugin открывает практически неограниченные возможности для создания плавных, гибких и динамичных анимаций объектов по SVG paths, обеспечивая контроль над скоростью, поворотом, фазой и сложностью движения.