Ограничения динамических изменений

Lottie Web опирается на заранее сгенерированное описание анимации в формате JSON, экспортированное из After Effects через Bodymovin. Это определяет ключевое ограничение всей модели: динамические изменения возможны только в рамках заранее заложенной структуры, а не произвольного редактирования сцены в рантайме.

Lottie Web не является системой сценического рендеринга в привычном смысле. Внутренне анимация представляет собой набор слоёв, ключевых кадров и свойств, уже «запечённых» в JSON. При инициализации через lottie.loadAnimation создаётся граф объектов, соответствующий этому описанию.

Динамические изменения в таком контексте делятся на:

  • управление воспроизведением (play, pause, stop)
  • изменение отдельных свойств через API (progress, speed, direction)
  • частичное воздействие на свойства элементов через setValue
  • манипуляции с DOM-обёрткой (SVG/Canvas контейнер)

Любая попытка изменить структуру сцены выходит за пределы модели исполнения.

Неизменяемая структура анимации

Основное ограничение заключается в том, что JSON-анимация после загрузки считается статической.

Невозможно:

  • добавлять новые слои
  • удалять существующие слои
  • изменять порядок слоёв
  • пересоздавать иерархию объектов
  • динамически менять parenting (связи родитель-дочерний слой)

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

Изменение структуры возможно только через полную перезагрузку анимации с новым JSON.

Ограничения работы с ключевыми кадрами

Ключевые кадры (keyframes) в Lottie являются основой всей анимационной логики. После экспорта они становятся неизменяемыми интерполяционными данными.

Ограничения:

  • невозможно добавлять новые keyframes
  • невозможно удалять существующие keyframes
  • невозможно изменять кривые интерполяции (ease) на лету
  • невозможно перестраивать временную шкалу

Допустимы только косвенные воздействия:

  • изменение прогресса анимации (goToAndStop, goToAndPlay)
  • смещение времени воспроизведения
  • изменение скорости проигрывания

Таким образом, временная логика остаётся фиксированной.

Ограничения изменения слоёв и иерархии

Слои в Lottie представляют собой результат экспорта из After Effects и не являются полноценными runtime-объектами.

Недоступно:

  • создание новых shape layers
  • добавление precomp слоёв
  • изменение структуры групп внутри shape
  • изменение parenting связей

Даже если доступ к отдельным слоям возможен через internal API, он остаётся ограниченным набором свойств без возможности структурного расширения.

Любая попытка динамической модификации сцены приводит к необходимости пересборки всей анимации.

Динамическое управление свойствами

Некоторые свойства допускают ограниченное изменение во время выполнения:

  • opacity (прозрачность)
  • transform (position, scale, rotation)
  • color (в отдельных случаях через expressions-аналоги отсутствуют, но через setValue можно)
  • progress всей анимации

Однако доступ к этим свойствам зависит от структуры JSON. Свойства должны быть заранее определены в исходной композиции.

Ключевой принцип: динамически изменяется только то, что уже существует в графе.

Любая попытка изменить несуществующее свойство игнорируется движком.

Текст и шрифты

Текстовые слои являются одной из наиболее ограниченных областей.

Ограничения:

  • невозможность изменения структуры текста (tracking, paragraph settings) в полном объёме
  • зависимость от экспортированного font embedding или SVG-конвертации
  • отсутствие полноценной поддержки динамических шрифтовых систем
  • ограниченные возможности замены текста при сложных анимациях

Часто доступна только замена строки текста через setText, при условии что слой был корректно экспортирован.

Если текст был преобразован в shapes (outline), он полностью теряет динамическую природу.

Растровые ресурсы и изображения

Изображения в Lottie фиксируются как ссылки или встроенные assets.

Ограничения:

  • невозможность динамического добавления новых изображений без пересборки assets
  • замена изображений возможна только через заранее определённые assets id
  • отсутствие runtime-менеджмента текстур
  • невозможность масштабной подмены ассетов без пересоздания анимации

В большинстве случаев изображение рассматривается как статический ресурс внутри композиции.

Маски и эффекты

Маски (masks) и эффекты (effects) являются одной из самых жёстко ограниченных областей.

Недоступно:

  • изменение формы маски в runtime
  • добавление новых масок
  • изменение параметров сложных эффектов After Effects (blur, glow, distort)

Некоторые базовые параметры могут реагировать на трансформации слоя, но не на структурные изменения.

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

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

Частое применение динамических изменений приводит к следующим эффектам:

  • пересчёт сценического графа
  • перерасчёт SVG path или canvas frame
  • увеличение нагрузки на main thread
  • потеря плавности при высоком FPS контенте

Особенно критично:

  • многократный вызов setState-подобных изменений
  • постоянная замена текста или transform свойств
  • попытки синхронного управления несколькими слоями

Lottie не предназначен для поведения, характерного для game engines или reactive UI сцен.

Пересоздание анимации vs обновление

При достижении ограничений динамической модели применяется стратегия полной пересборки:

  • загрузка нового JSON
  • уничтожение текущего instance (destroy)
  • создание нового экземпляра анимации

Этот подход используется при:

  • смене сцены
  • значительной модификации структуры
  • переключении вариантов дизайна

Частичная модификация используется только для параметров, заложенных заранее.

Практические паттерны обхода ограничений

В условиях статичности структуры применяются архитектурные решения:

  • подготовка нескольких вариантов анимации в одном JSON через скрытые слои
  • использование прозрачности и transform вместо удаления объектов
  • симуляция динамики через keyframe-driven параметры
  • разбиение сложной анимации на несколько независимых Lottie-инстансов
  • внешнее управление состоянием через JavaScript слой обёртки

Такие подходы позволяют компенсировать отсутствие полноценного runtime-редактора сцены, сохраняя контроль над визуальным результатом без нарушения ограничений формата.