В Lottie-анимациях каждая визуальная форма описывается как набор векторных слоёв, где геометрия, стили и трансформации представлены через структурированный JSON. В отличие от растровой графики, здесь отсутствует фиксированное разрешение: каждая фигура пересчитывается в реальном времени, что делает систему масштабируемой и предсказуемой при любых размерах контейнера.
В основе лежит концепция shape layer, внутри которого содержится
массив объектов shapes. Каждый элемент этого массива
описывает либо геометрию, либо визуальные атрибуты:
rect, ellipse,
star, path)merge, trim,
offset path)fill, stroke,
gradient fill)transform)Каждая форма не существует изолированно — она всегда вложена в
структуру группы ("ty": "gr"), что позволяет комбинировать
несколько фигур в единый объект.
Все формы Lottie используют локальную систему координат слоя. Начало координат обычно находится в центре композиции, но внутри групп каждая форма получает собственный локальный контекст.
Ключевые параметры трансформации:
p — позиция (Position)a — точка якоря (Anchor Point)s — масштаб (Scale)r — вращение (Rotation)o — непрозрачность (Opacity)Трансформации применяются иерархически: сначала локальные изменения формы, затем группы, затем слой целиком. Это позволяет строить сложные сцены без разрушения базовой геометрии.
Прямоугольник описывается объектом:
{
"ty": "rc",
"p": { "a": 0, "k": [0, 0] },
"s": { "a": 0, "k": [200, 100] },
"r": { "a": 0, "k": 10 }
}
Ключевые параметры:
p — центр прямоугольникаs — ширина и высотаr — радиус скругления угловПрямоугольник всегда создаётся относительно центра группы, а не верхнего левого угла, что упрощает анимацию масштабирования и вращения.
При изменении радиуса углов происходит интерполяция дуг, а не простое наложение скругления, что сохраняет гладкость контуров при трансформациях.
Эллиптические формы задаются через тип el:
{
"ty": "el",
"p": { "a": 0, "k": [0, 0] },
"s": { "a": 0, "k": [150, 150] }
}
Если значения ширины и высоты совпадают, формируется окружность.
Особенность реализации заключается в том, что окружность не хранится как набор точек — она описывается параметрически, что позволяет сохранять идеальную гладкость при любом масштабе.
Тип sr (star) используется для построения как звёзд, так
и правильных многоугольников:
{
"ty": "sr",
"p": { "a": 0, "k": [0, 0] },
"pt": { "a": 0, "k": 5 },
"ir": { "a": 0, "k": 40 },
"or": { "a": 0, "k": 80 },
"r": { "a": 0, "k": 0 }
}
Основные параметры:
pt — количество вершинir — внутренний радиусor — внешний радиусr — поворотПри изменении внутреннего радиуса от нуля до значения внешнего радиуса звезда постепенно трансформируется в правильный многоугольник.
Геометрия вычисляется динамически, что позволяет анимировать количество лучей и их форму без пересоздания объекта.
Тип sh (shape) представляет кривые Безье и используется
для сложных контуров:
{
"ty": "sh",
"ks": {
"a": 0,
"k": {
"i": [[0, 0], [0, 0]],
"o": [[0, 0], [0, 0]],
"v": [[-100, 0], [0, 100], [100, 0]],
"c": true
}
}
}
Структура пути:
v — вершиныi — входные контрольные точкиo — выходные контрольные точкиc — замкнут ли путьКривые Безье второго порядка обеспечивают плавные переходы между сегментами. При анимации точек происходит морфинг формы, а не пересчёт геометрии с нуля, что обеспечивает стабильную интерполяцию.
Группы ("ty": "gr") объединяют несколько
shape-элементов:
{
"ty": "gr",
"it": [
{ "ty": "rc", "...": "..." },
{ "ty": "fl", "c": { "k": [1, 0, 0, 1] } }
]
}
Внутри группы порядок элементов критически важен:
Все элементы внутри группы наследуют трансформации группы, но могут иметь собственные локальные изменения.
{
"ty": "fl",
"c": { "a": 0, "k": [0.2, 0.6, 1, 1] },
"o": { "a": 0, "k": 100 }
}
c — цвет в RGBAo — непрозрачностьЗаливка применяется ко всей геометрии, находящейся выше в массиве группы.
{
"ty": "st",
"c": { "a": 0, "k": [0, 0, 0, 1] },
"w": { "a": 0, "k": 4 },
"lc": 2,
"lj": 2
}
Параметры:
w — толщина линииlc — тип окончания линии (butt, round, square)lj — тип соединения углов (miter, round, bevel)Обводка рассчитывается вдоль математического пути, а не по пикселям, что обеспечивает одинаковый визуальный результат при любом масштабе.
Lottie поддерживает операции, изменяющие геометрию без изменения исходных точек:
Позволяет «обрезать» контур:
{
"ty": "tm",
"s": { "a": 0, "k": 0 },
"e": { "a": 0, "k": 50 }
}
s — начало сегментаe — конец сегментаИспользуется для эффекта рисования линии.
Скругляет углы сложных форм без модификации базовой геометрии, применяя фильтрацию вершин.
Внутри группы элементы отрисовываются сверху вниз по массиву
it. Это означает:
Понимание порядка критично при создании сложных композиций, где один и тот же контур используется для нескольких визуальных слоёв.
{
"ty": "sh",
"ks": {
"a": 0,
"k": {
"i": [[0,0],[0,0],[0,0]],
"o": [[0,0],[0,0],[0,0]],
"v": [[-50,-50],[50,-50],[0,50]],
"c": true
}
}
}
В сочетании с группой:
{
"ty": "gr",
"it": [
{ "ty": "sh", "...": "..." },
{ "ty": "fl", "c": { "k": [0, 1, 0, 1] } },
{ "ty": "st", "w": { "k": 3 } }
]
}
Библиотека lottie-web подключается как runtime для
воспроизведения JSON-анимаций:
import lottie from "lottie-web";
lottie.loadAnimation({
container: document.getElementById("animation"),
renderer: "svg",
loop: true,
autoplay: true,
path: "/animation.json"
});
Режим renderer: "svg" обеспечивает сохранение векторной
природы всех описанных форм, включая прямоугольники, окружности и кривые
Безье.
Альтернативные режимы:
svg — векторный рендерингcanvas — растровый рендеринг через Canvas APIhtml — DOM-based рендерингПри анимации векторных форм Lottie использует покадровую интерполяцию параметров:
Если количество вершин между ключевыми кадрами совпадает, происходит плавный морфинг. При несовпадении применяется перераспределение точек, что может изменять локальную топологию формы.
SVG-рендерер преобразует каждую shape-структуру в соответствующие SVG-элементы:
rect → <rect>ellipse → <ellipse>path → <path>fill → fillstroke → strokeПри этом анимации транслируются в атрибуты transform,
d, opacity, что позволяет браузеру
использовать нативный механизм отрисовки без промежуточных пересчётов
растровых изображений.