Параметр speed в библиотеке mo.js управляет
глобальной скоростью воспроизведения анимации, влияя на
то, как быстро проходит весь таймлайн. В отличие от изменения
duration, которое влияет на конкретную анимацию,
speed масштабирует время выполнения без изменения логики
самих анимационных сегментов.
speed применяется как множитель
времени:
speed: 1 — нормальная скорость (по умолчанию)speed: 2 — анимация проигрывается в 2 раза быстрееspeed: 0.5 — анимация замедляется в 2 разаФактически происходит масштабирование временной
шкалы: все значения duration, delay,
repeatDelay и других временных параметров пересчитываются
автоматически.
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
duration: 2000,
fill: 'none',
stroke: 'cyan',
strokeWidth: 5
});
circle.speed(2).play();
В этом примере:
speed(2) фактическое время — 1000 мсПусть задана анимация:
duration: 1000,
delay: 500
При speed: 2:
duration → 500 мсdelay → 250 мсПри speed: 0.5:
duration → 2000 мсdelay → 1000 мсТаким образом, speed влияет на всю временную
структуру, включая:
durationdelayrepeatDelaytimelinedurationdurationspeedПример:
circle.duration(2000); // фиксированное изменение
circle.speed(2); // относительное ускорение
speed особенно полезен при использовании
mojs.Timeline.
const timeline = new mojs.Timeline();
timeline
.add(circle1, circle2)
.speed(1.5)
.play();
Здесь:
timeline синхронно ускоряютсяspeed можно изменять во время
выполнения:
circle.play();
setTimeout(() => {
circle.speed(0.3);
}, 500);
Эффект:
Это позволяет реализовывать:
При наличии repeat:
const shape = new mojs.Shape({
repeat: 3,
duration: 1000
}).speed(2);
Все повторы также ускоряются:
speed не изменяет форму easing-функции, но влияет на её
восприятие:
easing: 'elastic.out'
При увеличении скорости:
При уменьшении:
timeline.speed(1.8);
Используется для:
shape.speed(0.4);
Применяется для:
document.addEventListener('mousemove', (e) => {
const speed = e.clientX / window.innerWidth * 2;
shape.speed(speed);
});
Создаёт эффект:
0shape.speed(0);
Не поддерживаются:
shape.speed(-1); // некорректно
shape.speed(10);
shape.speed(2).play();
shape.pause();
shape.speed(0.5).play();
Поведение:
Методы mo.js поддерживают цепочку вызовов:
new mojs.Shape({...})
.speed(1.5)
.play();
mo.js использует собственный механизм тайминга, где:
speed влияет на расчёт текущего времени
(currentTime)В CSS аналогом можно считать:
animation-duration
animation-play-state
Но:
speeddurationmo.js решает это через абстракцию таймлайна.
Использовать speed для:
Избегать:
duration, если нужна точная настройкаshape.speed(2000); // неверно
speed — не абсолютное время, а коэффициент.
shape1.speed(2);
shape2.speed(1);
Если они в одном Timeline, может возникнуть конфликт —
лучше управлять скоростью на уровне таймлайна.
speed — множитель времени