В Lottie Web цикличность воспроизведения задаётся на уровне
инициализации анимации через объект конфигурации
lottie.loadAnimation. Основной механизм управления повтором
— параметр loop.
lottie.loadAnimation({
container: document.getElementById('anim'),
renderer: 'svg',
loop: true,
autoplay: true,
path: 'animation.json'
});
Значение true переводит анимацию в непрерывное
воспроизведение. После достижения конца композиции происходит
автоматический возврат к началу.
loop: true
Поведение:
ip до op (диапазон
кадров Lottie-композиции)Значение false отключает повтор.
loop: false
Поведение:
complete фиксирует завершение циклаЧисловое значение задаёт точное количество циклов.
loop: 3
Поведение:
Lottie Web опирается на временную шкалу, импортированную из After Effects через Bodymovin. Ключевые параметры:
ip — initial frame (начальный кадр)op — out point (конечный кадр)fr — frame rateЦикл воспроизведения фактически представляет собой повторное движение
указателя времени от ip к op.
При включённом loop происходит:
opipПосле создания анимации управление переходит к объекту
AnimationItem.
const anim = lottie.loadAnimation(config);
anim.loop = true;
anim.loop = false;
anim.loop = 5;
Изменение параметра влияет на поведение следующего цикла, но не всегда прерывает текущий.
Lottie предоставляет события жизненного цикла:
complete — завершение одного полного
воспроизведенияloopComplete — завершение цикла при активном loopenterFrame — каждый кадрПри отключённом loop повтор можно реализовать
вручную:
anim.addEventListener('complete', () => {
anim.goToAndPlay(0, true);
});
Такой подход даёт контроль над логикой:
Lottie позволяет воспроизводить не всю композицию, а её часть.
anim.playSegments([10, 50], true);
Цикл внутри сегмента создаётся повторным вызовом:
function loopSegment() {
anim.playSegments([10, 50], true);
}
anim.addEventListener('complete', loopSegment);
Особенности:
true во втором аргументе принудительно перезапускает
сегментСвойство direction влияет на поведение цикла:
1 — вперёд-1 — назадanim.setDirection(-1);
anim.play();
anim.addEventListener('complete', () => {
const dir = anim.playDirection === 1 ? -1 : 1;
anim.setDirection(dir);
anim.play();
});
Такой подход создаёт эффект “пинг-понга”, где анимация движется туда-обратно без сброса в начальный кадр.
В режиме renderer: 'svg' или 'canvas' цикл
реализуется через внутренний requestAnimationFrame.
Каждый цикл включает:
При включённом loop этот процесс не прерывается, а лишь
сбрасывает временную шкалу.
При экспорте из After Effects могут быть заданы markers (метки), которые используются как логические точки цикла.
"markers": [
{ "cm": "start", "tm": 0 },
{ "cm": "end", "tm": 60 }
]
В Lottie Web можно использовать их как основу для сегментного цикла:
anim.playSegments(['start', 'end'], true);
(при условии поддержки именованных сегментов в конкретной сборке экспорта)
anim.addEventListener('complete', () => {
if (shouldRepeat) {
anim.goToAndPlay(0, true);
}
});
Логика определяется внешним состоянием:
let count = 0;
const max = 5;
anim.addEventListener('complete', () => {
count++;
if (count < max) {
anim.goToAndPlay(0, true);
}
});
Поведение аналогично loop: number, но позволяет менять
лимит в процессе выполнения.
lottie.loadAnimation({
autoplay: true,
loop: true
});
autoplay запускает первый цикл автоматическиloop определяет поведение после завершения первого
проходаautoplay требует ручного вызова
play()При каждом новом цикле Lottie:
Это важно для анимаций с:
Цикл может быть остановлен в любой момент:
anim.stop();
anim.loop = false;
или полным уничтожением:
anim.destroy();
При остановке:
loopComplete больше не вызываются