Lottie Web предоставляет механизм управления воспроизведением анимаций на основе JSON-моделей, экспортируемых из After Effects через Bodymovin. Одним из ключевых аспектов работы с библиотекой является контроль автовоспроизведения, поскольку поведение анимации напрямую влияет на UX, производительность и восприятие интерфейса.
Автовоспроизведение в Lottie определяется на этапе инициализации
через параметр autoplay. Он управляет тем, начнёт ли
анимация воспроизводиться сразу после загрузки.
lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: true,
path: 'animation.json'
});
При autoplay: true воспроизведение запускается
автоматически после завершения загрузки и первичной инициализации
DOM-структуры анимации.
При autoplay: false анимация загружается в состояние
“готова к запуску”, но остаётся на первом кадре до явного вызова методов
управления.
const anim = lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: false,
path: 'animation.json'
});
anim.play();
После отключения автовоспроизведения управление полностью переходит к API экземпляра анимации.
anim.play(); // запуск
anim.pause(); // пауза
play() продолжает воспроизведение с текущего кадра, не
сбрасывая состояние. pause() фиксирует текущий кадр без
изменения прогресса.
Для сценариев, где автовоспроизведение заменяется программной логикой, используются методы навигации по таймлайну.
anim.goToAndStop(50, true);
Первый аргумент — кадр или время (в зависимости от второго
параметра). Второй аргумент isFrame определяет
интерпретацию значения:
true — кадрыfalse — миллисекундыanim.playSegments([10, 60], true);
Позволяет воспроизводить только часть анимации. Это часто используется для UI-состояний:
Автовоспроизведение часто отключают для контроля UX-сценариев.
const anim = lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: false,
autoplay: false,
path: 'animation.json'
});
document.getElementById('btn').addEventListener('click', () => {
anim.play();
});
Такой подход предотвращает нежелательную нагрузку и визуальный шум при загрузке страницы.
Даже при autoplay: true важно учитывать момент
инициализации DOM.
document.addEventListener('DOMContentLoaded', () => {
lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: true,
path: 'animation.json'
});
});
Если контейнер отсутствует в момент инициализации, анимация не будет привязана корректно, что приведёт к “тихому” сбою без ошибок.
Одним из наиболее распространённых паттернов является отключение автовоспроизведения вне области видимости.
const anim = lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: false,
path: 'animation.json'
});
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
anim.play();
} else {
anim.pause();
}
});
});
observer.observe(document.getElementById('anim'));
Такой подход снижает нагрузку на CPU и GPU, особенно при большом количестве SVG-анимаций на странице.
Автовоспроизведение часто синхронизируют с активностью вкладки браузера.
document.addEventListener('visibilitychange', () => {
if (document.hidden) {
anim.pause();
} else {
anim.play();
}
});
Это особенно важно для:
Параметр loop тесно связан с autoplay, но
имеет независимую семантику.
lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: true,
path: 'animation.json'
});
Поведение:
loop: true — бесконечное повторениеloop: number — ограниченное количество цикловloop: false — один проходКомбинации:
autoplay: false + loop: true → старт только вручную, но
затем бесконечный циклautoplay: true + loop: false → однократное
воспроизведение при загрузкеВ сложных интерфейсах автовоспроизведение часто привязывается к состояниям приложения.
function setState(state) {
switch (state) {
case 'loading':
anim.playSegments([0, 30], true);
anim.loop = true;
break;
case 'success':
anim.loop = false;
anim.playSegments([31, 60], true);
break;
case 'idle':
anim.stop();
break;
}
}
Метод stop() возвращает анимацию к первому кадру и
полностью останавливает прогресс.
Иногда требуется задержка перед запуском:
const anim = lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: false,
path: 'animation.json'
});
setTimeout(() => {
anim.play();
}, 1000);
Это используется для:
Мобильные браузеры могут ограничивать автозапуск, особенно при наличии интенсивной графики. В таких случаях:
autoplay: true может игнорироваться до взаимодействия
пользователяcanvasautoplay: false и запускать
через жест пользователяdocument.addEventListener('touchstart', () => {
anim.play();
}, { once: true });
При необходимости точного контроля момента начала воспроизведения используется предварительная загрузка:
const anim = lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: false,
path: 'animation.json'
});
anim.addEventListener('DOMLoaded', () => {
anim.goToAndStop(0, true);
});
Это гарантирует, что анимация не начнёт воспроизведение до полной готовности DOM-структуры SVG.
В реальных приложениях автовоспроизведение редко используется в чистом виде. Чаще применяется комбинация:
autoplayIntersectionObservervisibilitychangeplaySegmentsТакой подход обеспечивает предсказуемое поведение и контроль над ресурсами без потери визуальной динамики интерфейса.