Lottie Web поддерживает автоматический запуск анимации как один из
базовых сценариев воспроизведения, реализуемый через параметр
конфигурации autoplay, а также через программное управление
экземпляром анимации после загрузки. Поведение автозапуска зависит от
способа инициализации, окружения выполнения, выбранного рендерера и
состояния DOM.
Создание экземпляра анимации в Lottie Web выполняется через
lottie.loadAnimation, где задаются ключевые параметры:
container — DOM-элемент для рендераrenderer — способ отображения (svg,
canvas, html)loop — зацикливаниеautoplay — автоматический запускanimationData или path — источник
JSON-анимацииАвтоматический запуск активируется исключительно при
autoplay: true. В этом случае библиотека вызывает
play() сразу после успешной загрузки и первичного рендера
сцены.
const animation = lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: true,
path: 'animation.json'
});
При таком сценарии момент старта зависит от завершения загрузки JSON и построения внутреннего дерева элементов SVG/Canvas.
Внутренний жизненный цикл можно разделить на этапы:
Параметр autoplay влияет только на пятый этап. Если он
отключён, воспроизведение не начинается автоматически, даже при
полностью готовой сцене.
const animation = lottie.loadAnimation({
container: document.querySelector('.icon'),
renderer: 'svg',
loop: true,
autoplay: false,
path: 'data.json'
});
В таком случае запуск управляется вручную:
animation.play();
Рендерер влияет на момент готовности к автозапуску.
SVG
Canvas
HTML
Lottie Web предоставляет события жизненного цикла, позволяющие синхронизировать запуск с состоянием загрузки.
Основные события:
DOMLoaded — DOM построенdata_ready — JSON загруженconfig_ready — конфигурация примененаloaded_images — изображения загружены (если
используются)Часто автозапуск реализуется вручную через событие
DOMLoaded:
const anim = lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: false,
path: 'animation.json'
});
anim.addEventListener('DOMLoaded', () => {
anim.play();
});
Такой подход позволяет избежать преждевременного старта до завершения построения всех слоёв.
В сценариях лендингов и интерфейсных анимаций автозапуск часто
привязывается к видимости элемента. Используется
IntersectionObserver, который запускает анимацию только при
появлении блока в области viewport.
const anim = lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: false,
path: 'anim.json'
});
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
anim.play();
} else {
anim.pause();
}
});
});
observer.observe(document.getElementById('anim'));
Такой подход снижает нагрузку на CPU и GPU, особенно при большом количестве анимаций на странице.
Современные браузеры накладывают ограничения на автоматическое воспроизведение медиа-контента. Хотя Lottie Web не относится к аудио или видео, аналогичные ограничения могут косвенно влиять на поведение анимаций:
requestAnimationFrame
приостанавливаетсяДля стабильного поведения используется проверка видимости документа:
document.addEventListener('visibilitychange', () => {
if (document.hidden) {
anim.pause();
} else {
anim.play();
}
});
После создания экземпляра доступны методы управления:
play() — запуск воспроизведенияpause() — остановка на текущем кадреstop() — сброс к началуgoToAndPlay(frame, isFrame) — запуск с конкретного
кадраsetSpeed(value) — изменение скорости
воспроизведенияАвтозапуск может быть эмулирован через setTimeout, если
требуется задержка:
const anim = lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: false,
path: 'anim.json'
});
setTimeout(() => {
anim.play();
}, 500);
В интерфейсах с динамической загрузкой ресурсов автозапуск часто откладывается до завершения инициализации всего UI:
Promise.all([
document.fonts.ready,
fetch('/api/config')
]).then(() => {
anim.play();
});
Такой подход предотвращает рассинхронизацию между текстовыми слоями и визуальными элементами анимации.
При использовании loop: false автозапуск может быть
реализован повторно через событие завершения:
anim.addEventListener('complete', () => {
anim.stop();
anim.play();
});
Или с изменением направления воспроизведения:
anim.setDirection(-1);
anim.play();
Если контейнер создаётся после загрузки скрипта, важно обеспечить корректный момент инициализации:
window.addEventListener('load', () => {
const container = document.createElement('div');
document.body.appendChild(container);
lottie.loadAnimation({
container,
renderer: 'svg',
loop: true,
autoplay: true,
path: 'anim.json'
});
});
Без явного ожидания DOM возможна ситуация, при которой автозапуск происходит до фактического добавления контейнера в документ.
Множественные автозапускающиеся анимации увеличивают нагрузку из-за
постоянного вызова requestAnimationFrame. В SVG-рендерере
это особенно заметно при сложной структуре слоёв.
Оптимизационные стратегии:
autoplay для невидимых элементовpause() вне viewportsetSpeedАвтозапуск следует рассматривать как активное состояние рендеринга, требующее контроля жизненного цикла и видимости элементов страницы.