Событие config_ready

В Lottie Web процесс создания анимации строится как последовательность этапов загрузки и подготовки данных. До того как анимация становится доступной для рендеринга, формируется и нормализуется конфигурация, на основе которой далее загружаются ресурсы и строится внутренняя модель анимации.

Событие config_ready относится к ранней стадии инициализации и фиксирует момент, когда конфигурация анимации полностью разобрана и приведена к внутреннему формату библиотеки, но данные анимации ещё не обязательно загружены или отрендерены.

Место config_ready в цепочке инициализации

Жизненный цикл Lottie Web условно включает несколько последовательных этапов:

  • создание экземпляра анимации через lottie.loadAnimation
  • разбор входной конфигурации
  • событие config_ready
  • загрузка данных (JSON или URL)
  • событие data_ready
  • построение DOM или canvas-слоя
  • событие DOMLoaded
  • начало воспроизведения

Событие config_ready фиксирует момент, когда входной конфигурационный объект уже обработан библиотекой и преобразован в единый внутренний формат, пригодный для дальнейших шагов.

На этом этапе:

  • нормализуются параметры renderer, loop, autoplay
  • вычисляются базовые настройки композиции
  • подготавливаются ссылки на будущие ресурсы
  • создаётся внутренняя структура анимации без полной загрузки контента

Сигнатура события и регистрация обработчика

В Lottie Web события подписываются через экземпляр анимации, возвращаемый lottie.loadAnimation.

const animation = lottie.loadAnimation({
  container: document.getElementById('anim'),
  renderer: 'svg',
  loop: true,
  autoplay: false,
  path: '/animations/data.json'
});

animation.addEventListener('config_ready', () => {
  console.log('Конфигурация анимации подготовлена');
});

Обработчик срабатывает один раз за жизненный цикл конкретного экземпляра анимации, поскольку конфигурация формируется однократно при инициализации.

Содержание конфигурации на момент события

На момент возникновения события структура анимации уже содержит:

  • нормализованные параметры композиции
  • подготовленные ссылки на загрузку данных
  • вычисленные размеры холста или SVG-контейнера
  • базовую информацию о слоях (без полного разбора содержимого)

При этом отсутствуют:

  • загруженные ключевые кадры
  • изображения и внешние ресурсы
  • готовая DOM-структура (для SVG/HTML renderer)
  • данные, необходимые для рендеринга первого кадра

Отличие от data_ready и DOMLoaded

Событие config_ready часто путается с более поздними стадиями, однако различие принципиальное.

config_ready

Фиксирует завершение обработки входного конфигурационного объекта.

data_ready

Срабатывает после загрузки и парсинга JSON-анимации. На этом этапе доступна полная структура слоёв, ключевых кадров и свойств.

DOMLoaded

Актуально для SVG/HTML renderer. Указывает на завершение построения DOM-структуры анимации и готовность к визуальному отображению.

Таким образом, config_ready находится до загрузки данных и является наиболее ранним сигналом о том, что экземпляр анимации успешно инициализирован.

Практическое значение события

Использование события связано с необходимостью контроля момента, когда конфигурация уже стабилизирована, но ресурсы ещё не загружены.

Типовые сценарии:

Предварительная модификация параметров

На стадии config_ready возможно безопасное вмешательство в настройки до начала загрузки данных.

animation.addEventListener('config_ready', () => {
  animation.setSpeed(1.5);
});

Логирование и диагностика

Событие применяется для отслеживания корректности конфигурации в сложных системах с динамической генерацией анимаций.

animation.addEventListener('config_ready', () => {
  console.log('Renderer:', animation.renderer);
  console.log('Loop:', animation.loop);
});

Синхронизация внешних систем

В архитектурах, где анимации загружаются динамически, config_ready используется как точка синхронизации с UI-слоем приложения.

Поведение при динамической загрузке

При использовании удалённых JSON-файлов или динамически формируемых конфигураций событие может возникать с небольшой задержкой после вызова loadAnimation.

В случае локальной конфигурации (передача объекта вместо пути) событие возникает практически мгновенно, так как отсутствует этап сетевой загрузки.

lottie.loadAnimation({
  container: document.body,
  renderer: 'svg',
  loop: true,
  animationData: animationObject
});

Даже при передаче animationData событие сохраняет свою роль — фиксирует момент нормализации структуры.

Влияние renderer на момент возникновения

Поведение события не зависит от типа рендерера:

  • SVG renderer — подготовка структуры DOM ещё не выполнена
  • Canvas renderer — холст ещё не отрисован
  • HTML renderer — DOM-узлы ещё не созданы

Общее свойство: config_ready всегда относится к логической подготовке, а не к визуальному представлению.

Ошибки и особенности обработки

Событие не гарантирует наличие валидных данных анимации. Возможны ситуации:

  • некорректный JSON будет выявлен позже, на стадии data_ready
  • отсутствующие ресурсы вызовут ошибки загрузки после config_ready
  • частично сформированная конфигурация может быть откорректирована библиотекой автоматически

Поэтому использование config_ready как финальной точки готовности анимации приводит к некорректным ожиданиям.

Взаимодействие с API экземпляра анимации

После срабатывания события становятся доступны стабильные значения базовых параметров:

  • animation.isPaused
  • animation.loop
  • animation.renderer
  • animation.currentFrame (начальное значение)

Однако доступ к слоям и структуре композиции на этом этапе ограничен, поскольку они формируются только после загрузки данных.

Архитектурная роль в Lottie Web

Событие выполняет функцию промежуточного сигнала между:

  • инициализацией экземпляра
  • загрузкой и парсингом ресурсов

Его основная задача — разделение этапа конфигурации и этапа загрузки данных. Это позволяет библиотеке:

  • стабилизировать параметры до начала I/O операций
  • подготовить внутренние структуры
  • обеспечить предсказуемость последующих событий

Использование в сложных сценариях загрузки

В системах с множественными анимациями config_ready применяется для:

  • построения очередей загрузки
  • распределения ресурсов между анимациями
  • предварительного расчёта нагрузки на рендерер

Пример типовой логики:

animation.addEventListener('config_ready', () => {
  registerAnimation(animation);
  scheduleDataLoading(animation);
});

Такая схема позволяет контролировать момент появления новых анимаций в системе до их фактического рендеринга.

Особенности повторного создания экземпляров

При повторной инициализации анимации событие генерируется заново для каждого нового экземпляра. Старые слушатели не переиспользуются, что требует явного управления жизненным циклом подписок в приложениях с динамическими компонентами.

Стабильность и предсказуемость

config_ready относится к наиболее стабильным событиям Lottie Web, так как не зависит от:

  • скорости сети
  • размера анимации
  • сложности композиции

Его возникновение определяется исключительно внутренней обработкой конфигурационного объекта.