GSAP (GreenSock Animation Platform) предоставляет мощный механизм для управления анимациями через Timeline, который позволяет группировать и синхронизировать множество анимаций. Одним из ключевых преимуществ является возможность переиспользования Timeline, что делает код более модульным и легко масштабируемым.
Для начала создается объект gsap.timeline(). Он может
быть как пустым, так и с предустановленными
параметрами, такими как repeat, yoyo,
defaults:
const mainTimeline = gsap.timeline({
defaults: { duration: 1, ease: "power1.out" }
});
После создания Timeline можно добавлять анимации через метод
.to(), .from(), .fromTo():
mainTimeline
.to(".box", { x: 100 })
.to(".circle", { y: 50 });
Переиспользование Timeline позволяет создавать шаблоны анимаций, которые можно многократно запускать на разных элементах без дублирования кода. Существует несколько способов:
Часто Timeline создают внутри функции, чтобы динамически настраивать элементы или параметры анимации:
function createBoxAnimation(selector) {
const tl = gsap.timeline();
tl.to(selector, { x: 200, duration: 1 })
.to(selector, { rotation: 180, duration: 0.5 });
return tl;
}
const box1Timeline = createBoxAnimation(".box1");
const box2Timeline = createBoxAnimation(".box2");
Такой подход позволяет создавать независимые копии Timeline для разных элементов.
.add() для комбинированияTimeline можно добавлять в другой Timeline, что обеспечивает иерархическую структуру анимаций:
const childTimeline = gsap.timeline();
childTimeline.to(".child", { opacity: 1, duration: 1 });
const parentTimeline = gsap.timeline();
parentTimeline.add(childTimeline, "+=0.5") // запускаем с задержкой 0.5 секунды
.to(".parent", { scale: 1.2, duration: 1 });
Метод .add() может принимать Timeline, функцию
или массив анимаций, что делает его универсальным инструментом
для составления сложных последовательностей.
Timeline можно кэшировать и повторно запускать через
методы .restart() или .play():
const tl = gsap.timeline({ paused: true });
tl.to(".element", { x: 300, duration: 2 });
// повторный запуск
tl.restart();
Использование параметра paused: true позволяет
контролировать момент старта Timeline и применять его несколько раз без
пересоздания.
Чтобы Timeline был максимально универсальным, можно использовать параметры при создании анимации:
function animateElement(selector, distance, rotation) {
return gsap.timeline()
.to(selector, { x: distance, duration: 1 })
.to(selector, { rotation: rotation, duration: 0.5 });
}
animateElement(".box1", 150, 90).play();
animateElement(".box2", 300, 180).play();
Такой подход превращает Timeline в настраиваемый модуль анимации, где изменяются только входные параметры.
GSAP предоставляет методы для управления Timeline на лету:
.pause() — приостанавливает воспроизведение..resume() — возобновляет..seek(time) — перемещает позицию воспроизведения к
определенному времени..reverse() — воспроизводит Timeline в обратном
направлении.Пример динамического контроля:
const tl = animateElement(".box", 200, 90);
tl.play();
setTimeout(() => {
tl.reverse(); // анимация возвращается обратно
}, 2000);
Использование этих подходов делает работу с GSAP более структурированной, уменьшает дублирование кода и позволяет строить масштабируемые анимационные системы для веб-приложений.