В библиотеке GSAP управление временной шкалой анимации осуществляется
с помощью различных методов, среди которых seek() и
progress() играют ключевую роль. Они позволяют точно
перемещаться к определённым моментам анимации и управлять её прогрессом
независимо от фактического времени воспроизведения.
seek()Метод seek() перемещает анимацию к конкретной позиции на
временной шкале. Позиция указывается в секундах,
относительно начала анимации.
Синтаксис:
animation.seek(time);
Параметры:
time — число в секундах, определяющее момент, к
которому нужно переместиться.Примеры использования:
const tl = gsap.timeline();
tl.to(".box", { x: 300, duration: 2 });
tl.to(".box", { y: 200, duration: 2 });
// Переместить анимацию на 1.5 секунды
tl.seek(1.5);
В этом примере элемент .box будет находиться в
промежуточном состоянии первой анимации по координате x и
ещё не начнёт движение по y.
Особенности метода seek():
gsap.timeline()).progress()Метод progress() управляет долю завершённости
анимации, выраженной в диапазоне от 0 до 1.
Синтаксис:
animation.progress(value);
Параметры:
value — число от 0 до 1, где 0 соответствует началу
анимации, 1 — её концу.Примеры использования:
const tl = gsap.timeline();
tl.to(".circle", { scale: 2, duration: 2 });
tl.to(".circle", { rotation: 180, duration: 2 });
// Переместить анимацию на половину её прогресса
tl.progress(0.5);
После вызова .progress(0.5) анимация будет находиться в
середине первой и второй части timeline, исходя из их пропорций по
длительности.
Особенности метода progress():
progress через gsap.to().seek() тем, что работает с
относительным прогрессом, а не с абсолютным
временем.seek() и progress()Эти методы могут использоваться вместе для тонкой настройки анимации.
Пример синхронизации:
const tl = gsap.timeline({ paused: true });
tl.to(".square", { x: 400, duration: 4 });
tl.to(".square", { y: 200, duration: 2 });
// Перейти к 50% прогресса анимации
tl.progress(0.5);
// Затем мгновенно перейти на отметку 3 секунды
tl.seek(3);
Здесь сначала анимация устанавливается в середине timeline, а затем точно перемещается к 3 секундам, что позволяет комбинировать относительный и абсолютный контроль.
Для создания эффекта плавного перехода между состояниями timeline
удобно анимировать свойство progress:
gsap.to(tl, { progress: 1, duration: 2, ease: "power1.inOut" });
В этом случае timeline плавно завершится за 2 секунды, независимо от его текущей позиции. Это особенно полезно для интерактивных интерфейсов, когда нужно анимировать прогресс в ответ на действия пользователя, такие как перетаскивание ползунка или скроллинг.
seek() для мгновенного перехода к ключевым
моментам анимации без воспроизведения.progress() для контроля анимации через
процент выполнения или для плавных переходов.progress() с scrollTrigger для синхронизации
прокрутки и анимации.Эти методы открывают широкий спектр возможностей для тонкой настройки и контроля анимации, делая GSAP мощным инструментом для динамических веб-интерфейсов.