Lottie Web требует строгого соблюдения цепочки: JSON-анимация → корректная загрузка → правильный DOM-контейнер → активное воспроизведение. Любой разрыв в этой цепочке приводит к ситуации, когда анимация не запускается или остаётся статичным элементом.
Одной из самых частых причин является некорректно заданный контейнер.
Lottie ожидает существующий DOM-элемент, в который будет отрисован canvas или SVG. Если элемент отсутствует в момент инициализации, анимация не создаётся.
Критические моменты:
document.querySelector возвращает
nulldisplay: none на момент
инициализацииОсобенно важно учитывать порядок выполнения скриптов. При подключении
через <script> без defer DOM может быть
ещё не готов.
Lottie Web полностью зависит от корректного JSON-файла анимации.
Типовые проблемы:
При CORS-ошибках анимация может не выдавать явного сообщения, оставаясь в состоянии «пустого контейнера».
Дополнительно стоит учитывать, что при использовании
fetch или animationData структура должна быть
строго валидной. Даже одно некорректное поле может остановить
рендеринг.
Основной метод запуска анимации —
lottie.loadAnimation.
Критические параметры:
container — обязательный DOM-элементrenderer — svg, canvas или
htmlloop и autoplay — управляют стартомЕсли autoplay: false, а метод play() не
вызван вручную, визуально создаётся эффект «не работает».
Типичная ошибка:
autoplayТакже возможна ситуация, когда объект анимации не сохраняется в переменную, и управление проигрыванием становится невозможным.
Автовоспроизведение часто блокируется условиями окружения.
Факторы:
В некоторых браузерах анимации с аудио-ассоциациями или высокой нагрузкой могут блокироваться полностью до первого взаимодействия.
Выбор рендера напрямую влияет на поведение.
SVG:
Canvas:
HTML:
Некорректный выбор рендера может приводить к отсутствию визуального результата при формально «успешной» инициализации.
CSS способен полностью скрыть работающую анимацию.
Ключевые проблемы:
width и height равны 0overflow: hidden обрезает содержимоеopacity: 0visibility: hiddendisplay: noneОсобое внимание требуется к flex- и grid-контейнерам, где элемент может схлопываться при отсутствии явных размеров.
При работе в SPA-фреймворках часто возникает ситуация гонки:
loadAnimationВ результате Lottie привязывается к устаревшему элементу.
Типичный симптом — отсутствие ошибок при полном отсутствии анимации.
Если анимация инициализируется повторно без вызова
destroy, возможны конфликты:
Правильная практика требует явного управления жизненным циклом анимации.
Экспорт из After Effects через Bodymovin может создавать несовместимые структуры.
Причины:
В таких случаях файл может загружаться, но не отображать содержимое.
Диагностика состояния Lottie возможна через события:
DOMLoadeddata_failederrorcompleteОтсутствие DOMLoaded обычно указывает на проблему
загрузки JSON или контейнера.
Если события не срабатывают вовсе, проблема находится на уровне инициализации.
В сборщиках (Webpack, Vite) частая ошибка связана с путями:
publicPathОсобенно часто это проявляется после деплоя, когда локально всё работает корректно.
Некоторые интерфейсы требуют принудительного ожидания:
requestAnimationFrame перед инициализациейЕсли контейнер меняет размеры после запуска Lottie, анимация может оказаться невидимой из-за неверного пересчёта координат.
При отсутствии сохранённой ссылки:
play, pause,
destroyЭто приводит к состоянию, где анимация «как будто не существует», хотя она создана.
Базовая корректная структура включает:
loadAnimation после загрузки DOMautoplay: true или явный play()Любое отклонение от этой схемы увеличивает вероятность отсутствия воспроизведения.