В библиотеке mo.js параметр delay
отвечает за задержку перед началом анимации. Он определяет, сколько
времени (в миллисекундах) должно пройти после запуска анимации до
фактического старта её выполнения. Это позволяет точно контролировать
последовательность появления эффектов и синхронизировать несколько
анимаций между собой.
Значение delay задаётся в миллисекундах:
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
fill: 'none',
stroke: 'cyan',
strokeWidth: { 10: 0 },
duration: 1000,
delay: 500
});
circle.play();
В этом примере анимация начнётся через 500 мс после
вызова play().
delay не изменяет саму длительность
(duration), а лишь сдвигает начало выполнения. Общая
временная линия выглядит так:
[delay] → [duration]
Если:
delay = 500duration = 1000то полное время от вызова до завершения составит 1500 мс.
Один из ключевых сценариев применения — создание цепочек анимаций:
const first = new mojs.Shape({
shape: 'circle',
radius: { 0: 40 },
fill: 'red',
duration: 600
});
const second = new mojs.Shape({
shape: 'circle',
radius: { 0: 40 },
fill: 'blue',
duration: 600,
delay: 600
});
first.play();
second.play();
Здесь вторая анимация начнётся сразу после завершения первой за счёт
совпадения delay и duration.
TimelineПри использовании mojs.Timeline параметр
delay становится особенно полезным для тонкой настройки
синхронизации:
const timeline = new mojs.Timeline();
const shape1 = new mojs.Shape({
shape: 'rect',
x: { -100: 0 },
duration: 800
});
const shape2 = new mojs.Shape({
shape: 'rect',
x: { 100: 0 },
duration: 800,
delay: 400
});
timeline.add(shape1, shape2);
timeline.play();
В данном случае:
delay может быть задан функцией, что позволяет создавать
более сложные сценарии:
const burst = new mojs.Burst({
count: 5,
delay: (index) => index * 100,
radius: { 0: 100 }
});
Каждый следующий элемент будет запускаться с увеличенной задержкой:
Это часто используется для создания «волновых» или каскадных эффектов.
staggerХотя delay может выполнять роль ступенчатого запуска,
для групп элементов удобнее применять stagger, но внутри
mojs часто используется именно функция delay,
как показано выше.
repeat и yoyoПри использовании повторов важно учитывать, что delay
применяется только перед первым запуском, если не
указано иное:
const shape = new mojs.Shape({
shape: 'circle',
radius: { 0: 30 },
duration: 500,
delay: 300,
repeat: 3
});
Поведение:
В некоторых версиях и сценариях допустимы отрицательные значения
delay, что позволяет «перемотать» анимацию вперёд:
delay: -200
Это означает, что анимация начнётся сразу, но как будто уже прошло 200 мс её выполнения.
Практическое применение:
1. Путаница с duration
delay не замедляет анимацию2. Несоответствие таймингов
3. Избыточные задержки
delay в сложных сценах может
усложнить управление и сопровождение кодаКаскадная анимация элементов интерфейса:
items.forEach((item, i) => {
new mojs.Shape({
parent: item,
opacity: { 0: 1 },
delay: i * 100
}).play();
});
Имитация физического запаздывания:
delay: Math.random() * 300
Синхронизация с событиями:
setTimeout(() => animation.play(), 200);
или напрямую:
delay: 200
delayTimeline)duration — длительность анимацииrepeat — количество повторовspeed — скорость воспроизведенияtimeline — управление несколькими анимациямиПараметр delay выступает базовым инструментом тайминга,
который в сочетании с другими настройками позволяет формировать сложные,
выразительные и управляемые анимационные последовательности.