Экземпляр AnimationItem в Lottie Web представляет собой
центральный объект управления анимацией, возвращаемый при инициализации
через lottie.loadAnimation. Именно через его методы
осуществляется полный контроль над воспроизведением, навигацией по
кадрам, скоростью, направлением и жизненным циклом анимации. Архитектура
методов ориентирована на императивное управление состоянием анимации без
необходимости взаимодействия с внутренним рендерером или JSON-структурой
Lottie-файла.
Базовый набор методов отвечает за запуск, приостановку и остановку анимации. Эти операции изменяют внутренний таймер и состояние текущего кадра, не разрушая контекст анимации.
play() Запускает или возобновляет воспроизведение анимации с текущего кадра. Если анимация была поставлена на паузу, продолжение происходит без сброса состояния.
pause() Приостанавливает анимацию, фиксируя текущий кадр. Таймер воспроизведения останавливается, но состояние сохраняется.
play()stop() Останавливает воспроизведение и сбрасывает анимацию в начальное состояние.
firstFrameВ отличие от pause, метод stop изменяет
логическое состояние прогресса, а не только приостанавливает его.
Lottie Web предоставляет методы для прямого управления позицией на временной шкале без необходимости последовательного воспроизведения.
goToAndPlay(value, isFrame) Перемещает анимацию к указанному времени или кадру и сразу запускает воспроизведение.
value — целевое значение (в кадрах или
миллисекундах)isFrame — булев флаг, определяющий интерпретацию
значенияПоведение зависит от типа шкалы:
isFrame = true используется индекс кадраisFrame = false используется время в
миллисекундахМетод полезен для реализации интерактивных сценариев, где анимация должна начинаться с конкретной точки.
goToAndStop(value, isFrame) Аналогичен
goToAndPlay, но фиксирует анимацию на указанном кадре без
запуска воспроизведения.
playИспользуется для статической установки состояния анимации, например, превью или интерактивных состояний UI.
setSpeed(speed) Изменяет коэффициент скорости воспроизведения анимации.
1 — нормальная скорость< 1 — замедление> 1 — ускорениеСкорость применяется к внутреннему дельта-таймеру, влияя на шаг изменения текущего кадра.
Особенность реализации заключается в том, что скорость не пересчитывает ключевые кадры, а лишь масштабирует временную ось в реальном времени.
setDirection(direction) Устанавливает направление воспроизведения анимации.
1 — прямое воспроизведение-1 — обратное воспроизведениеМетод влияет на алгоритм инкремента текущего кадра. В сочетании с
setSpeed позволяет реализовывать сложные сценарии, включая
реверсивное плавное проигрывание без пересчета композиции.
При смене направления во время воспроизведения внутренний цикл продолжает работу без перезапуска.
setSubframe(useSubframes) Определяет, используется ли субкадровая интерполяция.
true — включение субкадров (более плавное
движение)false — дискретные кадрыСубкадровый режим влияет на точность интерполяции между ключевыми кадрами. При включении система начинает учитывать дробные значения времени, что повышает плавность, особенно при высоких FPS интерфейса.
Внутренне это влияет на способ вычисления прогресса композиции, переходя от целочисленных кадров к плавающей временной шкале.
destroy() Полностью уничтожает экземпляр анимации и освобождает связанные ресурсы.
После вызова destroy экземпляр становится невалидным, и
любые последующие вызовы методов могут приводить к ошибкам или
игнорироваться.
Метод критически важен при динамическом создании анимаций в SPA, где утечки памяти могут возникать при отсутствии явного удаления экземпляров.
Некоторые методы косвенно влияют на состояние анимации через модификацию параметров воспроизведения, не запуская цикл.
stop() — сброс состоянияpause() — фиксация текущего кадраgoToAndStop() — установка произвольного состоянияsetSpeed() — изменение динамики временной осиsetDirection() — изменение логики прогрессииКомбинации этих методов позволяют формировать статические состояния анимации без необходимости проигрывания.
Поведение методов AnimationItem не изолировано — они
изменяют общие внутренние параметры экземпляра:
Например, вызов setSpeed во время активного
play не прерывает воспроизведение, а лишь модифицирует шаг
изменения времени. Аналогично, setDirection мгновенно
изменяет знак приращения кадров, не сбрасывая прогресс.
goToAndPlay и goToAndStop принудительно
устанавливают кадр, что фактически переписывает текущее состояние
времени и может прерывать текущую логику воспроизведения.
Методы экземпляра работают поверх абстракции рендерера (Canvas, SVG
или HTML), не взаимодействуя напрямую с DOM-элементами за исключением
уничтожения (destroy). Это означает, что управление через
AnimationItem остается единым независимо от выбранного
renderer.
Внутренний цикл обновления основан на
requestAnimationFrame, а методы управления лишь
модифицируют параметры, которые интерпретируются на следующем кадре
отрисовки.
Такая архитектура обеспечивает предсказуемость поведения: