Перемотка анимации в Lottie Web основана на управлении текущим положением проигрывания через кадры (frames) и временные значения, которые интерпретируются движком рендеринга. В основе лежит объект AnimationItem, возвращаемый при инициализации через lottie.loadAnimation, предоставляющий методы для точного контроля состояния анимации.
Lottie Web оперирует дискретной кадровой сеткой, сформированной на основе частоты кадров, заданной в After Effects при экспорте. Ключевые параметры:
Кадр выступает базовой единицей навигации, что делает возможным детерминированный переход к любой точке анимации без необходимости пошагового воспроизведения.
Перевод времени в кадры осуществляется по формуле:
f = t fps
где t — время в секундах, fps — частота кадров, f — целевой кадр.
Основной механизм перемотки реализуется через метод:
animation.goToAndStop(frame, isFrame);
Параметр isFrame определяет интерпретацию первого аргумента:
Пример фиксации на 120 кадре:
animation.goToAndStop(120, true);
После вызова воспроизведение останавливается, а внутренний рендер фиксируется на указанной позиции.
Аналогичный переход с продолжением проигрывания:
animation.goToAndPlay(120, true);
При работе во временной шкале используется тот же методический интерфейс, но с переключением режима интерпретации:
animation.goToAndStop(2.5, false);
В этом случае позиция вычисляется через умножение времени на frameRate, после чего выполняется переход к соответствующему кадру.
После перемотки обновляется ряд внутренних параметров:
При использовании requestAnimationFrame дальнейшее поведение зависит от состояния play/pause. В состоянии stop анимация остаётся на фиксированном кадре без обновления.
Помимо точечного перехода, Lottie Web поддерживает перемотку по сегментам:
animation.playSegments([start, end], true);
Где:
Механизм используется для создания логических частей анимации, позволяя реализовывать псевдо-сцены внутри одного JSON-файла.
Пример:
animation.playSegments([0, 45], true);
или динамическое управление:
animation.playSegments([45, 90], true);
При экспорте из After Effects могут быть добавлены маркеры (markers), содержащие метаданные о позициях внутри анимации. Они доступны через animation.markers.
Структура маркера обычно включает:
Переход к маркеру реализуется через вычисление соответствующего кадра:
const marker = animation.markers.find(m => m.name === 'intro');
animation.goToAndStop(marker.time, false);
Такой подход позволяет реализовать семантическую навигацию по анимации без жесткой привязки к числовым индексам.
Перемотка в Lottie Web не всегда означает точное позиционирование до субкадровой точности во всех рендерах. Особенности:
При резком переходе между кадрами возможны визуальные скачки, связанные с пересчетом интерполированных значений свойств (position, opacity, path morphing).
После вызова goToAndStop или playSegments возможно дальнейшее управление:
animation.pause();
animation.play();
animation.stop();
Комбинация с перемоткой используется для построения контролируемых анимационных состояний, например:
animation.goToAndStop(0, true);
animation.pause();
или
animation.goToAndStop(100, true);
animation.play();
Полная длительность вычисляется через frameRate и totalFrames:
T =
где N — количество кадров, fps — частота кадров, T — длительность в секундах.
Это соотношение используется при конвертации временных шкал и при реализации пользовательских контроллеров прогресса, где ползунок может работать как в процентах, так и в абсолютных значениях кадров.
Некоторые реализации используют нормализованный прогресс (0–1), который переводится в кадры:
f = p N
где p — прогресс, N — totalFrames.
Это позволяет синхронизировать Lottie-анимацию с внешними системами управления интерфейсом, такими как скролл или слайдеры.
Если перемотка происходит во время активного play, Lottie Web:
В высоконагруженных сценах с большим количеством слоёв возможна кратковременная задержка на пересборку сцены, особенно при сложных morph-анимациях и масках.