duration — один из ключевых параметров
в библиотеке mo.js, определяющий, сколько времени (в миллисекундах)
занимает выполнение анимации. От правильной настройки длительности
зависит восприятие движения, ритм интерфейса и общая плавность
визуальных эффектов.
Параметр duration задаётся в миллисекундах и применяется
практически ко всем анимационным сущностям: Shape,
Tween, Burst, Timeline.
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
duration: 1000
});
В данном примере анимация увеличения радиуса круга происходит за 1000 мс (1 секунду).
Если параметр duration не указан, mo.js использует
стандартное значение:
duration: 1000
Это означает, что любая анимация без явного указания длительности будет длиться одну секунду.
Длительность напрямую влияет на характер движения:
Короткая длительность (100–300 мс) Быстрая, резкая анимация Подходит для кликов, откликов интерфейса
Средняя длительность (300–800 мс) Сбалансированная, естественная Используется в большинстве UI-анимаций
Длительная (800–2000+ мс) Медленная, выразительная Применяется для декоративных эффектов
Параметр duration работает в тесной связке с
easing. Даже при одинаковой длительности визуальный
результат может сильно отличаться.
const shape = new mojs.Shape({
radius: { 0: 100 },
duration: 1000,
easing: 'elastic.out'
});
Здесь вся анимация занимает 1 секунду, но распределение движения по времени определяется функцией easing.
duration может задаваться не только числом, но и
функцией:
duration: () => Math.random() * 1000 + 500
Каждый запуск анимации будет иметь случайную длительность от 500 до 1500 мс. Это полезно для создания естественных, “живых” эффектов.
В mo.js нельзя напрямую задать отдельную длительность для каждого свойства внутри одного объекта. Однако можно комбинировать несколько анимаций:
const move = new mojs.Shape({
x: { 0: 200 },
duration: 500
});
const scale = new mojs.Shape({
scale: { 0: 1 },
duration: 1000
});
Таким образом достигается эффект, при котором разные параметры изменяются с разной скоростью.
При использовании Timeline параметр
duration влияет на общий тайминг всей композиции.
const timeline = new mojs.Timeline();
timeline.add([
new mojs.Shape({ duration: 500 }),
new mojs.Shape({ duration: 1000 })
]);
Общая длительность таймлайна определяется самой длинной анимацией (в данном случае — 1000 мс), если не задано иначе.
При использовании параметра repeat длительность влияет
на каждый цикл:
new mojs.Shape({
radius: { 0: 50 },
duration: 500,
repeat: 3
});
Общее время выполнения:
500 мс × (1 + repeat) = 2000 мс
duration часто используется вместе с
delay:
new mojs.Shape({
duration: 1000,
delay: 500
});
delay — задержка перед началом (500 мс)duration — сама анимация (1000 мс)Общее время: 1500 мс
В Burst параметр duration применяется ко
всем частицам:
new mojs.Burst({
count: 10,
duration: 800
});
Однако можно задать разброс:
duration: { 500: 1500 }
Каждая частица получит случайную длительность в указанном диапазоне.
mo.js поддерживает интерполяцию:
duration: { 300: 900 }
Это означает:
При использовании stagger (разброса параметров) длительность играет важную роль:
new mojs.Burst({
count: 5,
duration: 1000,
delay: 'stagger(100)'
});
Каждый следующий элемент запускается позже, но длительность остаётся одинаковой.
Слишком короткие длительности:
Слишком длинные:
Оптимальная длительность:
1. Мгновенный отклик
duration: 150
2. Стандартная UI-анимация
duration: 300
3. Декоративный эффект
duration: 1200
mo.js позволяет управлять скоростью через
.setSpeed():
shape.setSpeed(2);
Фактическая длительность уменьшится в 2 раза:
effective duration = duration / speed
При использовании .playBackward() длительность остаётся
той же:
shape.playBackward();
Время выполнения не меняется, только направление.
1. Слишком короткая длительность
duration: 50
Анимация становится незаметной.
2. Игнорирование easing Длительность без правильной кривой даёт “плоский” эффект.
3. Несогласованные duration в группе Разные значения могут ломать композицию.
easing для выразительностиВ основе duration лежит временная шкала, где:
mo.js интерполирует значения свойств по времени с учётом easing-функции.
duration определяет:
Это фундаментальный параметр, от которого зависит вся динамика анимации в mo.js.