Lottie Web поддерживает несколько способов инициализации анимаций, и один из наиболее гибких вариантов — загрузка напрямую из JSON-объекта. Этот подход используется, когда данные анимации уже доступны в памяти приложения, были получены через API, импортированы как модуль или сформированы динамически.
JSON-объект Lottie представляет собой структурированное описание анимации: композиции, слои, ключевые кадры, эффекты и интерполяции. В отличие от загрузки через URL, при работе с объектом отсутствует этап сетевого запроса, что делает метод предпочтительным в SPA, PWA и сервер-сайд рендеринге с последующей гидратацией.
animationDataОсновной способ передачи JSON-объекта — свойство
animationData при инициализации анимации.
import lottie from "lottie-web";
import animationJson from "./animation.json";
const animation = lottie.loadAnimation({
container: document.getElementById("lottie"),
renderer: "svg",
loop: true,
autoplay: true,
animationData: animationJson
});
В этом примере JSON импортируется как модуль (при использовании сборщиков вроде Webpack, Vite или Rollup), после чего передаётся напрямую в движок Lottie.
Ключевые параметры:
svg,
canvas, html)При наличии animationData параметр path
игнорируется.
Часто JSON хранится на сервере или в статических ресурсах. В этом случае используется асинхронная загрузка.
import lottie from "lottie-web";
const container = document.getElementById("lottie");
fetch("/animations/data.json")
.then(response => response.json())
.then(data => {
lottie.loadAnimation({
container,
renderer: "svg",
loop: true,
autoplay: true,
animationData: data
});
});
Этот подход позволяет централизованно управлять анимациями без пересборки приложения. Особенно полезен в системах с динамической загрузкой контента.
При интеграции с backend JSON часто приходит как часть ответа API.
import lottie from "lottie-web";
async function initAnimation() {
const response = await fetch("/api/animation");
const animationData = await response.json();
lottie.loadAnimation({
container: document.getElementById("lottie"),
renderer: "svg",
loop: true,
autoplay: true,
animationData
});
}
initAnimation();
При таком подходе важно учитывать:
loadAnimationСовременные сборщики позволяют импортировать JSON напрямую:
import animationData from "./animation.json";
import lottie from "lottie-web";
lottie.loadAnimation({
container: document.querySelector("#lottie"),
renderer: "svg",
loop: true,
autoplay: true,
animationData
});
В этом случае JSON становится частью бандла. Это уменьшает количество HTTP-запросов и ускоряет первичную загрузку интерфейса.
Lottie допускает работу не только с готовыми файлами, но и с динамически сформированными структурами.
import lottie from "lottie-web";
const dynamicAnimation = {
v: "5.7.4",
fr: 30,
ip: 0,
op: 60,
w: 200,
h: 200,
layers: [
{
ty: 4,
nm: "Shape Layer",
ks: {
o: { a: 0, k: 100 },
r: { a: 0, k: 0 },
p: { a: 0, k: [100, 100, 0] },
a: { a: 0, k: [0, 0, 0] },
s: { a: 0, k: [100, 100, 100] }
},
shapes: [
{
ty: "el",
p: { a: 0, k: [0, 0] },
s: { a: 0, k: [80, 80] }
}
]
}
]
};
lottie.loadAnimation({
container: document.getElementById("lottie"),
renderer: "svg",
loop: true,
autoplay: true,
animationData: dynamicAnimation
});
Подобный подход применяется в системах генерации интерфейсов, визуализации данных и кастомных графических редакторах.
Lottie JSON имеет строго определённую схему. При передаче объекта напрямую критично соблюдение следующих аспектов:
Поле v определяет версию формата:
"v": "5.7.4"
Несовместимость версий может приводить к некорректному рендерингу слоёв или эффектов.
Поля:
fr — frame rateip — стартовый кадрop — конечный кадропределяют временную шкалу анимации.
Массив layers является ядром композиции. Каждый слой
может содержать:
ks)shapes)Ошибка в структуре слоёв приводит к частичной или полной потере рендеринга.
Переданный animationData не клонируется глубоко внутри
Lottie. Это означает, что изменение исходного объекта после
инициализации может повлиять на поведение анимации.
const anim = lottie.loadAnimation({
container,
renderer: "svg",
animationData: data
});
data.op = 30; // потенциально влияет на уже созданную анимацию
Для безопасной работы используется иммутабельность:
const safeData = structuredClone(data);
lottie.loadAnimation({
container,
renderer: "svg",
animationData: safeData
});
Если JSON не соответствует спецификации Lottie, анимация не будет отрисована без явной ошибки.
Отсутствие layers, assets или
fr приводит к пустому результату.
При передаче через API JSON может приходить в виде строки:
const data = JSON.parse(response.data);
Передача строки напрямую в animationData приводит к
сбою.
При загрузке через fetch могут возникать ограничения
CORS, но при использовании animationData этот фактор
отсутствует полностью.
JSON импортируется как модуль и входит в сборку, обеспечивая мгновенный доступ к анимации без задержек сети.
Анимации хранятся как JSON в базе данных и загружаются динамически при рендере страницы.
Каждый модуль может поставлять собственные Lottie-анимации как JSON-конфигурации, не завися от централизованных ассетов.
JSON формируется на основе пользовательских действий и используется как реактивное описание визуальных эффектов.
После создания анимации через loadAnimation объект можно
контролировать:
const anim = lottie.loadAnimation({
container,
renderer: "svg",
animationData
});
anim.pause();
anim.play();
anim.stop();
anim.goToAndPlay(10, true);
anim.destroy();
При загрузке из JSON-объекта поведение этих методов идентично другим способам инициализации, однако важно учитывать, что сам JSON остаётся внешней сущностью и не связан с жизненным циклом экземпляра.