Анимации Lottie
Lottie-анимации хранятся в формате JSON. Формат применяют для интерактивных элементов интерфейса: загрузочных экранов, индикаторов и других визуальных эффектов. Анимации не зависят от разрешения экрана и не нагружают сеть, в отличие от видео и растровых изображений.
В Bitrix Framework на базе библиотеки Lottie 5.13 доступно расширение ui.lottie. Расширение позволяет подключать анимации в интерфейсе и управлять воспроизведением из JavaScript-кода.

Подключить расширение
Подключите расширение ui.lottie в шаблон компонента или страницы.
В JavaScript-коде:
import {Lottie} from 'ui.lottie';
В PHP-коде:
\Bitrix\Main\UI\Extension::load('ui.lottie');
После подключения используйте объект BX.UI.Lottie для загрузки анимации.
Загрузить анимацию
Вызовите метод BX.UI.Lottie.loadAnimation() и передайте параметры в виде объекта.
-
container— HTML-элемент, в который нужно вставить анимацию. Обязательный параметр. -
path— путь к JSON-файлу с анимацией. Используйте, если файл загружается по URL. Файл должен быть доступен браузеру. -
animationData— данные анимации в виде загруженного JSON-объекта. Альтернатива параметруpath. -
renderer— тип отрисовки. Возможные значения:svg,canvas,html. Для векторной графики используйтеsvg. -
loop— зацикливание анимации. Передайтеtrueдля бесконечного повтора или число для фиксированного количества циклов. -
autoplay— автовоспроизведение. Возможные значения:true— воспроизведение сразу после загрузки,false— по событию. -
name— имя экземпляра анимации. Укажите имя, чтобы управлять анимацией черезBX.UI.Lottie.play(name)и аналогичные методы.
Для загрузки анимации передайте один источник данных: path или animationData.
Пример вызова:
const animation = BX.UI.Lottie.loadAnimation({
container: document.getElementById('lottie-container'),
path: '/local/assets/animations/loader.json',
renderer: 'svg',
loop: true,
autoplay: true
});
animation.addEventListener('data_failed', () => {
console.error('Не удалось загрузить Lottie-анимацию');
});
Элемент container должен существовать в DOM на момент вызова loadAnimation. Если элемент отсутствует, анимация не отображается.
Передать данные анимации
Используйте параметр animationData, когда JSON-объект уже получен из API или встроен в JavaScript-код. Такой способ не требует отдельного файла с анимацией.
В примере код загружает анимацию из переменной animationData. Перед вызовом loadAnimation() подставьте в нее JSON-объект Lottie.
<?php
\Bitrix\Main\UI\Extension::load('ui.lottie');
?>
<div id="lottie-container" style="width: 120px; height: 120px;"></div>
<script>
BX.ready(() => {
const container = document.getElementById('lottie-container');
const animationData = {
// JSON-объект Lottie-анимации
};
if (!container)
{
return;
}
const animation = BX.UI.Lottie.loadAnimation({
container,
animationData,
renderer: 'svg',
loop: true,
autoplay: true,
});
animation.addEventListener('data_failed', () => {
console.error('Не удалось обработать Lottie-анимацию');
});
});
</script>
Настроить анимацию
Метод loadAnimation возвращает объект AnimationItem. Используйте методы объекта AnimationItem, чтобы управлять анимацией программно.
-
play()— запускает воспроизведение. -
stop()— останавливает воспроизведение и возвращает к первому кадру. -
pause()— приостанавливает на текущем кадре. -
togglePause()— переключает паузу. -
setSpeed(speed)— изменяет скорость. Значение1— нормальная скорость,0.5— вдвое медленнее,2— вдвое быстрее. -
setDirection(direction)— меняет направление. Значение1— обычное направление,-1— обратное направление. -
goToAndStop(value, isFrame)— переходит к указанному времени или кадру, еслиisFrameпринимаетtrue, и останавливает воспроизведение. -
goToAndPlay(value, isFrame)— переходит к указанному времени или кадру, еслиisFrameпринимаетtrue, и продолжает воспроизведение.
Удалить анимацию и освободить память
Удалите анимацию из DOM и остановите все внутренние таймеры, когда анимация больше не нужна.
// Полностью уничтожить экземпляр, например, при смене страницы
animation.destroy();
Подписаться на события
Подпишитесь на события через addEventListener, чтобы синхронизировать анимацию с логикой приложения.
-
complete— анимация завершена. -
loopComplete— завершен очередной цикл, актуально приloop: true. -
enterFrame— событие на каждый кадр. -
drawnFrame— кадр отрендерен и отображен на экране. -
segmentStart— смена сегмента анимации. -
config_ready— конфигурация загружена. -
data_ready— JSON с анимацией загружен и обработан. -
DOMLoaded— анимация добавлена в DOM-дерево страницы. -
destroy— анимация удалена. -
data_failed— произошла ошибка при загрузке или обработке данных анимации. -
loaded_images— все внешние изображения успешно загружены.
animation.addEventListener('complete', () => {
console.log('Анимация завершена');
});
animation.addEventListener('loopComplete', () => {
console.log('Завершен один цикл');
});