В библиотеке Lottie Web управление анимацией строится вокруг
экземпляра анимации, который возвращается при инициализации через
lottie.loadAnimation. Этот экземпляр предоставляет набор
методов, среди которых ключевую роль в базовом управлении
воспроизведением играют play() и pause().
Эти методы относятся к уровню управления состоянием анимации и напрямую воздействуют на внутренний таймер проигрывания, не изменяя саму структуру или данные анимации.
Метод play() запускает или возобновляет воспроизведение
анимации с текущего кадра. Если анимация была остановлена,
воспроизведение продолжается с того места, где оно было прервано.
pause()direction)loop)const anim = lottie.loadAnimation({
container: document.getElementById('lottie'),
renderer: 'svg',
loop: true,
autoplay: false,
path: 'animation.json'
});
anim.play();
В данном случае анимация начинает воспроизводиться только после
явного вызова play(), поскольку autoplay
отключён.
Повторный вызов play() не перезапускает анимацию с
начала, если она уже находится в состоянии воспроизведения. Метод не
сбрасывает текущий кадр и не влияет на временную шкалу.
anim.play();
anim.play();
Поведение остаётся идентичным первому вызову: анимация продолжает проигрываться без прерывания.
play() влияет на внутренний флаг состояния проигрывания.
При этом Lottie Web не хранит отдельного публичного состояния “playing”,
однако его можно косвенно определить через логику приложения.
Типовые сценарии:
play()
возобновляетloop: false) → поведение
зависит от текущего кадра и конфигурации, возможен возврат к последнему
кадру или завершённое состояниеМетод pause() останавливает воспроизведение анимации на
текущем кадре. Таймер обновления кадров прекращает изменение прогресса
до следующего вызова play().
const anim = lottie.loadAnimation({
container: document.getElementById('lottie'),
renderer: 'svg',
loop: true,
autoplay: true,
path: 'animation.json'
});
anim.pause();
После вызова pause() анимация визуально «замирает» на
текущем кадре.
Повторный вызов pause() не изменяет состояние
анимации:
anim.pause();
anim.pause();
Анимация остаётся остановленной, без дополнительных эффектов или сброса кадров.
pause() не влияет на:
currentFrame)setSpeed)Он лишь останавливает обновление кадров, сохраняя всё остальное состояние неизменным.
Lottie Web использует цикл обновления кадров, основанный на
requestAnimationFrame. При вызове play()
запускается или возобновляется этот цикл, а при pause() —
прекращается выполнение обновляющей функции.
Упрощённо логика выглядит следующим образом:
play() → запуск render looppause() → остановка render loopПри этом сам объект анимации остаётся в памяти и сохраняет все параметры.
При loop: false анимация может достигать конечного кадра
и оставаться в завершённом состоянии.
В этом случае:
pause() фиксирует текущий кадр (обычно последний)play() может не привести к повторному воспроизведению
без изменения диапазона или явного сбросаТипичный сценарий:
anim.goToAndStop(0, true);
anim.play();
Здесь требуется ручное управление позицией перед повторным запуском.
Часто используется простая логика переключателя:
let isPlaying = false;
function toggleAnimation() {
if (isPlaying) {
anim.pause();
} else {
anim.play();
}
isPlaying = !isPlaying;
}
Хотя Lottie Web не предоставляет прямого метода
isPaused(), состояние обычно контролируется на уровне
приложения.
При работе с несколькими анимациями каждый экземпляр имеет
собственные методы play() и pause():
const anim1 = lottie.loadAnimation({...});
const anim2 = lottie.loadAnimation({...});
anim1.play();
anim2.pause();
Состояния не пересекаются, каждый экземпляр управляется независимо.
Параметр autoplay влияет только на начальное
состояние:
autoplay: true → автоматический запуск после
загрузкиautoplay: false → требуется явный
play()После инициализации управление полностью переходит к методам:
const anim = lottie.loadAnimation({
container: el,
renderer: 'svg',
loop: true,
autoplay: false,
path: 'data.json'
});
// анимация не стартует
anim.play(); // запуск
anim.pause(); // остановка
При потере видимости вкладки браузер может снижать частоту
requestAnimationFrame. В таких условиях:
play() остаётся активным состоянием, но рендер может
замедлятьсяpause() полностью прекращает обновления, снижая
нагрузкуВ сложных интерфейсах часто используется принудительная пауза при скрытии элемента:
document.addEventListener('visibilitychange', () => {
if (document.hidden) {
anim.pause();
} else {
anim.play();
}
});
Методы play() и pause() часто используются
вместе с:
stop() — сброс на начальный кадрgoToAndStop() — переход к конкретному кадру и
остановкаsetSpeed() — изменение скорости воспроизведенияКомбинация позволяет строить сложные сценарии управления анимацией без модификации JSON-данных.
После вызова destroy() экземпляр анимации
уничтожается:
play() и pause() становятся
недоступнымиanim.destroy();
anim.play(); // не имеет эффекта
pause() (pause не обнуляет
прогресс)play() без учёта loop: false и
завершённого состояния