Свойство timeScale в GSAP является мощным инструментом
для управления скоростью анимации без необходимости
вручную корректировать все временные параметры. Оно позволяет
динамически ускорять, замедлять или полностью останавливать анимацию,
сохраняя при этом все остальные её параметры и синхронизацию с другими
анимациями.
timeScaletimeScale работает как множитель стандартного времени
анимации. Его поведение можно описать так:
timeScale = 1 — анимация идёт с нормальной
скоростью.timeScale > 1 — анимация ускоряется. Например,
timeScale = 2 делает анимацию в два раза быстрее.0 < timeScale < 1 — анимация замедляется.
Например, timeScale = 0.5 замедляет её вдвое.timeScale = 0 — анимация останавливается, но не
завершается.timeScale < 0 — анимация воспроизводится в обратном
направлении.Это свойство применимо как к отдельным твинам (Tween),
так и к целым таймлайнам (Timeline), что делает его
чрезвычайно гибким инструментом для комплексной анимации.
Для одиночной анимации изменение скорости выглядит следующим образом:
gsap.to(".box", { x: 400, duration: 5 });
let tween = gsap.to(".box", { y: 200, duration: 5 });
// Ускоряем анимацию в 3 раза
tween.timeScale(3);
// Замедляем анимацию в 2 раза
tween.timeScale(0.5);
// Полная пауза
tween.timeScale(0);
В этом примере timeScale позволяет гибко
управлять воспроизведением без пересчета duration
или других параметров.
Для сложных последовательностей часто используют
Timeline. timeScale применяется ко всему
таймлайну:
let tl = gsap.timeline();
tl.to(".box", { x: 300, duration: 2 });
tl.to(".box", { y: 150, duration: 2 });
// Ускоряем весь таймлайн в 1.5 раза
tl.timeScale(1.5);
// Замедляем весь таймлайн вдвое
tl.timeScale(0.5);
Преимущество такого подхода — возможность контролировать все вложенные анимации одновременно, сохраняя их относительные задержки и синхронизацию.
GSAP позволяет изменять timeScale на
лету, что особенно полезно для интерактивных эффектов или
игр:
let tween = gsap.to(".circle", { x: 500, duration: 10 });
// Через 3 секунды ускоряем анимацию
setTimeout(() => {
tween.timeScale(2);
}, 3000);
// Через 6 секунд замедляем
setTimeout(() => {
tween.timeScale(0.5);
}, 6000);
В этом случае анимация адаптируется к новым условиям без перезапуска и без потери прогресса.
timeScale отлично сочетается с событиями пользователя,
например, колесиком мыши или кнопками управления:
let tl = gsap.timeline({ repeat: -1 });
tl.to(".slider", { x: 800, duration: 5 });
// Управление скоростью через input range
document.querySelector("#speedControl").addEventListener("input", e => {
let scale = parseFloat(e.target.value);
tl.timeScale(scale);
});
Это позволяет создавать плавные и отзывчивые интерфейсы, где анимация подстраивается под действия пользователя.
timeScale хорошо работает вместе с:
delay — задержки остаются пропорциональными текущей
скорости.repeat и yoyo — повторения и эффект
«обратного хода» сохраняют свою логику при изменении скорости.progress — можно изменять прогресс анимации независимо
от timeScale.Например, комбинация timeScale и динамического
progress позволяет создавать эффекты ускорения или
замедления в середине анимации без пересчета времени.
timeScale не влияет на
duration, а лишь масштабирует скорость воспроизведения.timeScale = 0 анимация останавливается, но остаётся
активной и может быть продолжена в любой момент.timeScale действует рекурсивно
на все вложенные твины, что обеспечивает удобное глобальное управление
сложной анимацией.timeScale — это инструмент, который превращает обычные
анимации в динамичные и управляемые процессы, давая
полный контроль над временем их воспроизведения без изменения исходных
параметров.