Анимации в Lottie Web представляют собой JSON-документы, экспортированные из Adobe After Effects через плагин Bodymovin. Внутри этих файлов содержится не только описание слоёв и анимационных ключей, но и ссылки на внешние и встроенные ресурсы — ассеты (assets).
Раздел assets является центральным хранилищем всех
дополнительных данных, необходимых для корректного воспроизведения
анимации. К таким данным относятся изображения, прекомпозиции и иногда
шрифтовые или векторные элементы.
Пример структуры:
{
"assets": [
{
"id": "image_0",
"w": 512,
"h": 512,
"u": "images/",
"p": "img_0.png",
"e": 0
}
]
}
Наиболее распространённый тип ассетов — изображения (PNG, JPG, WebP). Они используются в случаях, когда в анимации присутствуют сложные графические элементы, не представленные вектором.
Основные поля:
Особенности:
e = 0 изображение загружается по сетиe = 1 содержимое хранится прямо в JSON (base64),
что увеличивает размер файла, но убирает зависимость от внешних
ресурсовПри встраивании изображения кодируется в строку:
{
"id": "image_1",
"w": 256,
"h": 256,
"u": "",
"p": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"e": 1
}
Преимущества:
Недостатки:
Пре-композиции — это вложенные композиции из After Effects. Они позволяют структурировать сложные анимации и переиспользовать элементы.
Пример:
{
"id": "comp_0",
"layers": [
{
"ty": 4,
"nm": "Shape Layer"
}
]
}
Особенности:
Текст в Lottie Web может использовать системные или кастомные шрифты. Информация о шрифтах хранится в отдельном разделе:
{
"fonts": {
"list": [
{
"fName": "Roboto-Regular",
"fFamily": "Roboto",
"fStyle": "Regular"
}
]
}
}
Особенности:
Каждый ассет используется через ссылки в слоях (layers).
Связь осуществляется через поле refId.
Пример слоя:
{
"ty": 2,
"refId": "image_0",
"nm": "Image Layer"
}
Типы слоёв:
ty: 2 — слой изображенияty: 0 — прекомпозицияty: 4 — shape-слой (вектор)Таким образом, assets — это библиотека ресурсов, а
layers — механизм их использования.
Lottie Web предоставляет гибкие возможности управления загрузкой ассетов.
Позволяет задать базовый путь для загрузки изображений:
lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: true,
path: 'animation.json',
assetsPath: '/static/assets/'
});
Использование:
Позволяет полностью контролировать процесс загрузки изображений:
lottie.setLocationHref(window.location.href);
Или кастомная реализация:
lottie.loadAnimation({
imageLoader: customLoader
});
Применение:
Рекомендуется:
Эффективные подходы:
Иногда в JSON остаются лишние ресурсы:
Ручная очистка:
refIdassetsДля тяжёлых анимаций возможно:
Lottie Web поддерживает замену ресурсов во время выполнения.
animation.renderer.elements[0].updateDocumentData({
p: 'new-image.png'
});
Или через модификацию JSON перед загрузкой:
animationData.assets[0].p = 'new-image.png';
Применение:
fetch('animation.json')
.then(res => res.json())
.then(data => {
data.assets.forEach(asset => {
if (asset.id === 'image_0') {
asset.p = 'custom.png';
}
});
lottie.loadAnimation({
container: el,
animationData: data
});
});
<image> внутри
SVGLottie Web автоматически кэширует ассеты:
Рекомендации:
Причины:
u + p)assetsPathПроявления:
Решение:
Возможные причины:
Грамотная работа с ассетами напрямую влияет на производительность, размер бандла и стабильность анимации в браузере.