В Lottie Web событие segmentStart относится к группе событий жизненного цикла анимации и срабатывает в момент начала воспроизведения заданного сегмента. Сегменты используются для проигрывания части таймлайна анимации, ограниченной конкретным диапазоном кадров.
Событие фиксирует переход анимации в состояние воспроизведения нового диапазона, независимо от того, был ли он установлен вручную через API или инициирован внутренней логикой (например, при зацикливании сегментов).
Перед пониманием поведения segmentStart важно учитывать модель сегментов в Lottie:
[startFrame, endFrame]Типичный запуск сегмента осуществляется через API:
animation.playSegments([10, 60], true);
В этом случае Lottie Web переключает внутренний диапазон проигрывания и инициирует соответствующее событие segmentStart.
Событие возникает в следующих сценариях:
playSegmentsВнутри движка Lottie происходит:
segmentStartСобытие доступно через стандартный механизм событий анимации:
const animation = lottie.loadAnimation({
container: document.getElementById('box'),
renderer: 'svg',
loop: true,
autoplay: false,
path: 'animation.json'
});
animation.addEventListener('segmentStart', (event) => {
console.log('Старт сегмента');
});
Событие может быть снято аналогично другим событиям:
animation.removeEventListener('segmentStart', handler);
Объект события segmentStart содержит контекст текущего
состояния анимации на момент старта сегмента. Обычно доступны следующие
данные:
type — строка события, равная
"segmentStart"target или animation — ссылка на экземпляр
анимацииПример обработки:
animation.addEventListener('segmentStart', (e) => {
console.log(e.type); // segmentStart
console.log(e.animation);
});
Наиболее частый источник события — метод
playSegments.
animation.playSegments([0, 100], true);
Поведение:
[0, 100] устанавливается как активныйsegmentStartПри последовательном вызове:
animation.playSegments([0, 50], true);
animation.playSegments([50, 120], true);
каждый вызов инициирует отдельный segmentStart, так как
происходит смена диапазона.
Lottie Web допускает сценарии, в которых сегменты образуют цепочку:
Пример:
animation.addEventListener('complete', () => {
animation.playSegments([100, 200], true);
});
При этом каждый новый сегмент будет генерировать segmentStart, что позволяет строить управляемые сценарии анимации.
При включённом зацикливании поведение segmentStart сохраняется:
animation.loop = true;
animation.playSegments([0, 80], true);
Каждый новый цикл сегмента сопровождается повторным срабатыванием события.
При изменении направления:
animation.setDirection(-1);
animation.playSegments([80, 0], true);
segmentStart фиксирует старт даже при обратном воспроизведении, так как событие связано с началом сегмента, а не направлением движения.
Сегменты в Lottie Web не являются отдельными сущностями таймлайна, а представляют собой ограничения глобального времени.
При запуске segmentStart:
Это важно для сложных сценариев, где несколько анимаций синхронизируются по времени.
segmentStart часто используется для синхронизации интерфейсных переходов:
animation.addEventListener('segmentStart', () => {
document.body.classList.add('is-animating');
});
Сегменты применяются как состояния:
Каждое состояние представляет отдельный диапазон кадров.
function setState(state) {
const segmentsMap = {
idle: [0, 30],
hover: [30, 60],
active: [60, 120]
};
animation.playSegments(segmentsMap[state], true);
}
segmentStart фиксирует переход между состояниями, что позволяет синхронизировать внешнюю логику.
Событие может использоваться для сбора статистики:
animation.addEventListener('segmentStart', (e) => {
sendAnalytics({
event: 'segment_start',
timestamp: Date.now()
});
});
Lottie Web содержит несколько близких событий:
enterFrame — каждый кадр анимацииloopComplete — завершение циклаcomplete — завершение проигрыванияsegmentStart — начало сегментаКлючевое отличие segmentStart:
Повторная регистрация обработчика без удаления приводит к дублированию реакции:
animation.addEventListener('segmentStart', handler);
animation.addEventListener('segmentStart', handler);
Передача некорректных значений:
animation.playSegments([100, 0], true);
может приводить к неожиданной логике старта сегмента в зависимости от версии библиотеки.
Если autoplay включён одновременно с программным управлением сегментами, segmentStart может срабатывать в неожиданные моменты и не соответствовать пользовательскому ожиданию состояния.
В архитектурных схемах Lottie Web segmentStart выступает как точка синхронизации:
Событие формирует устойчивую точку входа в сегментированное воспроизведение, позволяя строить детерминированную логику поверх временной шкалы анимации.