В Lottie Web слой рендеринга отделён от описания анимации, что позволяет использовать разные стратегии отрисовки одного и того же JSON-описания. Основная модель строится вокруг выбора рендерера при инициализации анимации:
Каждый рендерер реализует собственный подход к построению сцены, управлению слоями, масками и трансформациями. При этом логика интерпретации композиции остаётся общей, а различия проявляются на уровне визуального вывода.
SVG-рендерер использует DOM-структуру как основу представления анимации. Каждый слой превращается в SVG-элемент, а трансформации и эффекты выражаются через атрибуты и стили.
Ключевые особенности:
Конфигурация SVG-рендерера передаётся через
rendererSettings:
lottie.loadAnimation({
container: document.getElementById('app'),
renderer: 'svg',
loop: true,
autoplay: true,
path: 'animation.json',
rendererSettings: {
preserveAspectRatio: 'xMidYMid meet',
progressiveLoad: true,
hideOnTransparent: true
}
});
Определяет поведение масштабирования SVG внутри контейнера. Значение влияет на:
Позволяет поэтапно загружать элементы SVG вместо полной отрисовки сразу. Это снижает пик нагрузки на DOM при сложных композициях.
Управляет скрытием элементов с полной прозрачностью, снижая количество активных DOM-узлов.
Canvas-рендерер формирует изображение через
CanvasRenderingContext2D. В отличие от SVG, здесь
отсутствует DOM-дерево анимации, что уменьшает нагрузку на браузер при
большом количестве слоёв.
Особенности:
lottie.loadAnimation({
container: document.getElementById('app'),
renderer: 'canvas',
loop: true,
autoplay: true,
path: 'animation.json',
rendererSettings: {
clearCanvas: true,
context: null,
scaleMode: 'noScale'
}
});
Определяет очистку холста перед отрисовкой каждого нового кадра. Включённый режим гарантирует отсутствие артефактов предыдущих кадров, но увеличивает нагрузку на GPU/CPU.
Позволяет передать внешний CanvasRenderingContext2D. Это
используется в интеграциях с существующими графическими системами, где
canvas управляется централизованно.
Определяет стратегию масштабирования:
noScale — фиксированное разрешениеfit — подгонка под контейнерHTML-рендерер использует DOM-элементы, но отличается от SVG тем, что строит структуру через HTML-теги и CSS-трансформации.
Особенности:
HTML-рендерер применяется в сценариях, где анимация является частью интерфейса, а не самостоятельным визуальным объектом.
rendererSettings выступает точкой расширения поведения
рендереров. Несмотря на различия SVG и Canvas, часть параметров
унифицирована.
Lottie Web поддерживает динамическое управление качеством через API:
lottie.setQuality('high');
Возможные режимы:
high — максимальная детализацияmedium — баланс производительностиlow — упрощённая отрисовкаРежим качества влияет на:
Глубокая кастомизация достигается через модификацию жизненного цикла
анимации. Рендеринг в Lottie Web привязан к циклу
requestAnimationFrame, что позволяет вмешиваться в процесс
отрисовки.
const anim = lottie.loadAnimation({
container: document.getElementById('app'),
renderer: 'canvas',
autoplay: false,
loop: true,
path: 'animation.json'
});
anim.setSpeed(1.2);
anim.play();
Изменение скорости влияет на временную шкалу, но не затрагивает сам рендерер, что сохраняет согласованность визуальной модели.
SVG-рендерер допускает модификацию DOM после построения сцены. Это используется для:
Пример модификации элементов:
anim.addEventListener('DOMLoaded', () => {
const svg = document.querySelector('svg');
svg.setAttribute('filter', 'url(#customFilter)');
});
Такой подход сохраняет совместимость с внутренней логикой Lottie, но позволяет расширять визуальную часть без изменения JSON.
Масштабирование является одной из ключевых проблем при интеграции Lottie-анимаций в адаптивные интерфейсы. Рендереры используют разные модели обработки размеров.
Пример компенсации DPI:
const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
const dpr = window.devicePixelRatio || 1;
canvas.width = 800 * dpr;
canvas.height = 600 * dpr;
ctx.scale(dpr, dpr);
Lottie Web не ограничивает тип контейнера, что позволяет внедрять рендереры в сложные UI-архитектуры.
Применяются сценарии:
В таких случаях renderer становится частью внешнего управляющего слоя, а не самостоятельным объектом.
Несмотря на гибкость архитектуры, рендереры Lottie Web имеют ряд жёстких ограничений:
Расширение поведения обычно реализуется через обёртки, постобработку и перехват событий, а не через замену ядра рендеринга.
При изменении рендерера между SVG, Canvas и HTML происходит полная пересборка сцены. Это означает:
Поэтому переключение рендерера требует повторной загрузки анимации, а не динамической замены.
Выбор рендерера напрямую влияет на стратегию оптимизации:
Оптимизация часто строится не только на выборе рендерера, но и на сочетании: