Событийная модель Lottie Web построена вокруг регистрации обработчиков на экземпляре анимации и передачи структурированного event-объекта при наступлении ключевых этапов жизненного цикла. Каждый тип события отражает либо фазу загрузки и подготовки данных, либо состояние воспроизведения, либо завершение отдельных сегментов анимации.
Практически все события Lottie Web передают объект события, содержащий базовый набор полей и ссылку на экземпляр анимации.
Типичный event-объект включает:
1 вперёд, -1 назад)Набор полей может варьироваться в зависимости от типа события.
Некоторые события содержат только animationItem и
type, без временных данных.
Срабатывает после успешной загрузки JSON-анимации и её первичной обработки.
Параметры event:
animationItem — объект анимацииtype = "data_ready"В этот момент данные уже распарсены, но DOM-элементы рендера могут ещё не быть готовы.
Событие возникает после применения конфигурации и подготовки внутренних структур анимации.
Параметры event:
animationItemtype = "config_ready"Используется для ситуаций, где требуется доступ к финальным параметрам рендера до старта воспроизведения.
Фиксирует момент полной готовности DOM-структуры, используемой для рендеринга SVG или HTML-слоёв.
Параметры event:
animationItemtype = "DOMLoaded"Не содержит временных метрик, так как относится к стадии построения DOM.
Событие ошибки загрузки или обработки данных.
Параметры event:
animationItemtype = "error"error — текст или объект ошибкиВ некоторых реализациях также присутствует:
message — описание ошибкиstack — стек вызовов (реже)Ключевое событие, вызываемое на каждом кадре анимации.
Параметры event:
animationItemtype = "enterFrame"currentTimetotalTimecurrentFrametotalFramesdirectionДополнительно может присутствовать:
progress — нормализованное значение от 0 до 1Особенность данного события заключается в высокой частоте вызова, что требует минимальной логики внутри обработчика.
Срабатывает при завершении одного цикла воспроизведения.
Параметры event:
animationItemtype = "loopComplete"loopCount — номер завершённого циклаtotalLoops — общее число циклов (если задано)Если режим зацикливания установлен как бесконечный,
totalLoops может отсутствовать.
Событие финального завершения анимации.
Параметры event:
animationItemtype = "complete"В отличие от loopComplete, вызывается только при
достижении конечного кадра без дальнейших повторов.
Срабатывает при переходе к новому сегменту анимации.
Параметры event:
animationItemtype = "segmentStart"firstFrame — начальный кадр сегментаlastFrame — конечный кадр сегментаtotalFrames — длина сегментаИспользуется при работе с методом playSegments, когда
анимация разбивается на логические части.
Срабатывает при уничтожении экземпляра анимации.
Параметры event:
animationItemtype = "destroy"Событие не содержит временных данных. Используется для освобождения ресурсов и очистки ссылок.
Практически каждое событие содержит ссылку
animationItem, представляющую внутреннее состояние
анимации.
Ключевые поля:
Также доступны методы управления:
play()pause()stop()setSpeed()goToAndPlay()goToAndStop()setDirection()Через animationItem можно получать доступ к текущему
renderer и данным композиции.
Не все события гарантируют одинаковый набор полей. Например:
enterFrame содержит полный набор временных
параметровcomplete ограничивается идентификатором событияerror расширяется полем errorСобытия делятся на две категории по нагрузке:
enterFramedata_ready,
complete, loopComplete,
segmentStart, destroyОбработка высокочастотных событий требует минимизации вычислений внутри callback-функций.
В зависимости от режима (SVG, Canvas, HTML)
animationItem может содержать разные внутренние
реализации:
Это влияет на доступные свойства внутри animationItem,
но не изменяет структуру событий.
Для упрощения обработки часто используется логическая группировка:
При загрузке через JSON или URL порядок событий обычно фиксирован:
data_readyconfig_readyDOMLoaded (при наличии DOM-рендера)enterFrame (циклически)loopComplete (при цикличности)complete (при завершении)destroy (при удалении экземпляра)Отклонения возможны при динамической подгрузке ассетов или изменении сегментов во время воспроизведения.
Внутренне обработчики регистрируются через:
addEventListener(type, callback)removeEventListener(type, callback)Тип события передаётся строкой, соответствующей имени события. Callback получает единый event-объект, структура которого определяется типом события и состоянием анимации.
currentFrame — дискретное значениеcurrentTime — непрерывное значение в секундахСоотношение зависит от frameRate:
currentTime = currentFrame / frameRate
1 — прямое воспроизведение-1 — обратное воспроизведениеВ enterFrame направление влияет на изменение
currentFrame.
При использовании сегментов (playSegments) параметры
событий ограничиваются текущим диапазоном:
firstFrame и lastFrame определяют
локальные границыcurrentFrame считается относительно сегментаtotalFrames соответствует длине сегмента, а не всей
анимацииСобытия Lottie Web формируют поток состояний, в котором каждый этап —
от загрузки JSON до финального завершения воспроизведения — представлен
отдельным типом сигнала. Структура event-объектов варьируется по глубине
данных в зависимости от природы события, при этом
animationItem остаётся центральной точкой доступа к
состоянию и управлению анимацией.