Анимации Lottie
Анимации Lottie — это анимации в формате JSON. Формат применяют для интерактивных элементов интерфейса: загрузочных экранов, индикаторов и других визуальных эффектов. Анимации не зависят от разрешения экрана и не нагружают сеть, в отличие от видео и растровых изображений.
В Bitrix Framework на базе библиотеки Lottie 5.13 доступно расширение ui.lottie. Расширение позволяет подключать анимации в интерфейсе и управлять воспроизведением из JavaScript-кода.
Подключить расширение
Подключите библиотеку Lottie в шаблон компонента или страницы.
В JavaScript-коде:
import {Lottie} from 'ui.lottie';
В PHP-коде:
\Bitrix\Main\UI\Extension::load('ui.lottie');
После подключения доступен глобальный объект Lottie.
Загрузить анимацию
Вызовите метод BX.UI.Lottie.loadAnimation() и передайте параметры в виде объекта.
-
container— HTML-элемент, в который нужно вставить анимацию. Обязательный параметр. -
path— путь к JSON-файлу с анимацией. Используйте, если файл загружается по URL. -
animationData— данные анимации в виде загруженного JSON-объекта. Альтернатива параметруpath. -
renderer— тип отрисовки. Возможные значения:svg,canvas,html. Для векторной графики используйтеsvg. -
loop— зацикливание анимации. Передайтеtrueдля бесконечного повтора или число для фиксированного количества циклов. -
autoplay— автовоспроизведение. Возможные значения:true— воспроизведение сразу после загрузки,false— по событию. -
name— имя экземпляра анимации. Укажите имя, чтобы управлять анимацией черезLottie.play(name)и аналогичные методы.
Пример вызова:
const animation = BX.UI.Lottie.loadAnimation({
container: document.getElementById('lottie-container'),
path: '/local/assets/animations/loader.json',
renderer: 'svg',
loop: true,
autoplay: true
});
Элемент container должен существовать в DOM на момент вызова loadAnimation. Если элемент отсутствует, анимация не отображается.
Настроить анимацию
Метод 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('Завершен один цикл');
});