В формате Lottie все внешние изображения описываются внутри
JSON-файла анимации как отдельные сущности в массиве
assets. Каждому изображению соответствует объект с
идентификатором, путем к ресурсу и метаданными размера.
Типичная структура asset выглядит следующим образом:
id — уникальный идентификатор изображенияp — путь к файлу (или имя файла)u — базовый путь (обычно URL или папка)w, h — ширина и высотаe — флаг встроенного ресурса (base64)Внутри экспортированных из After Effects через Bodymovin анимаций изображения никогда не «вшиваются» в слои напрямую, а всегда ссылаются через систему assets. Это ключевой механизм, который делает возможной подмену ресурсов без изменения структуры анимации.
Lottie Web при инициализации анимации создает внутреннее представление всех assets и привязывает их к DOM (SVG/HTML) или Canvas-рендереру.
Загрузка выполняется через:
lottie.loadAnimationanimationData (JSON)path (серверный источник)При этом изображения не загружаются напрямую через внешний код приложения — они создаются внутри движка через внутренний asset-преобразователь.
Ключевая особенность: все изображения можно подменять до или после инициализации, так как они хранятся в едином реестре.
Самый прямой способ изменения ресурсов — редактирование JSON перед передачей в движок.
Пример логики замены:
animationData.assetsp или uПреимущество подхода заключается в том, что идентификаторы слоёв и привязки остаются неизменными, а значит анимация не ломается.
Особое значение имеет поле u (base URL). При его
изменении можно централизованно перенаправить все изображения:
При загрузке анимации можно задать базовый путь для всех изображений:
lottie.loadAnimation({
container: element,
renderer: 'svg',
loop: true,
autoplay: true,
path: '/animation.json',
assetsPath: 'https://cdn.example.com/images/'
});
Механизм работает следующим образом:
p из JSON остаётся неизменнымassetsPath подставляется как префиксЭтот способ особенно эффективен при смене окружений без модификации JSON-файлов.
После создания экземпляра анимации доступ к ресурсам осуществляется
через объект animationItem. Внутренний список assets
доступен через:
animationItem.assetsanimationItem.renderer.elementsИзменение ресурсов на лету возможно через перебор массива assets и замену путей.
Пример логики:
idp на новый URLВ SVG-рендерере изменения часто подхватываются автоматически, так как
изображения представлены DOM-элементами <image>.
При использовании SVG renderer каждый asset становится отдельным
DOM-узлом. Это позволяет менять href у
<image> элементов без вмешательства в структуру
анимации.
Особенности поведения:
<image href="...">href приводит к мгновенной замене
ресурсаВ Canvas renderer такой подход невозможен, так как изображения компонуются в bitmap-слой.
Внутренний механизм управления ресурсами основан на карте соответствий:
asset.id → image element / textureПри необходимости полной подмены используется стратегия:
idЭтот подход применяется при смене тем оформления, когда набор изображений полностью заменяется, но структура анимации сохраняется.
Некоторые Lottie-файлы содержат изображения в виде base64:
e: 1p содержит data URIПодмена таких ресурсов отличается:
Такие ассеты встречаются в экспортированных анимациях с «встроенными» ресурсами, когда отсутствует внешняя файловая структура.
Внутри Lottie Web предусмотрена возможность перехвата загрузки изображений через кастомные методы загрузки данных.
Подход реализуется через:
Это позволяет реализовать:
Изображения в Lottie часто зависят от:
Реализация обычно строится на пересборке asset map:
p или
uТакой подход исключает необходимость пересоздания анимации.
Подмена ресурсов имеет ряд технических ограничений:
Особенно критично соблюдение исходных размеров (w,
h), так как Lottie использует их для вычисления
трансформаций слоёв.
При интенсивной замене изображений важную роль играет кеширование:
Lottie Web не управляет кешем изображений напрямую, поэтому корректная стратегия загрузки ресурсов полностью зависит от внешней инфраструктуры.
В сложных анимациях один asset может использоваться в нескольких слоях или композициях. Это приводит к эффекту глобальной замены:
В таких случаях применяется стратегия клонирования assets:
idПри использовании Canvas renderer изображения преобразуются в текстуры. Подмена требует:
Этот режим менее гибкий по сравнению с SVG, но более производительный при большом количестве слоёв.
На практике часто вводится промежуточный слой:
p указывает на логический ключПример логики:
asset.id = "icon_star"icon_star → /dark/star.svgЭто позволяет полностью отделить анимацию от конкретных изображений и управлять ресурсами как конфигурацией, а не как частью графики.