Длительность анимации в Motion One задаётся параметром
duration и определяет, сколько времени занимает переход от
начального состояния к конечному. Этот параметр является базовым
инструментом управления временной шкалой любой анимации и напрямую
влияет на восприятие интерфейса, плавность переходов и динамику
взаимодействия.
Внутри Motion One длительность интерпретируется как часть опций
функции animate, а также используется в таймлайнах для
синхронизации сложных последовательностей.
Параметр duration описывает время выполнения анимации в
секундах. В отличие от многих низкоуровневых API, где время задаётся в
миллисекундах, Motion One ориентируется на CSS-подобную модель
времени.
Основная форма:
animate(element, { opacity: 1 }, { duration: 0.5 })
Значение 0.5 означает половину секунды. Это упрощает
расчёты и делает код ближе к CSS-анимациям.
Возможные варианты задания:
0.2 — 200 миллисекунд1 — одна секунда2.5 — две с половиной секундыMotion One принимает длительность в виде числового значения в секундах. При этом важно учитывать, что:
requestAnimationFrame
обеспечивает стабильность кадровПример последовательного изменения длительности:
animate(box, { x: 200 }, { duration: 0.1 })
animate(box, { x: 0 }, { duration: 1 })
В первом случае движение будет почти мгновенным, во втором — плавным и заметным.
Функция animate принимает объект опций, где
duration задаёт временную характеристику всей анимации.
import { animate } from "motion"
animate(".card", {
transform: "translateY(0px)",
opacity: 1
}, {
duration: 0.8
})
В этом примере оба свойства — transform и
opacity — синхронно изменяются в течение 0.8 секунды.
Если анимация содержит несколько свойств, duration
применяется ко всей группе ключевых кадров, а не к отдельным
свойствам.
При использовании ключевых кадров длительность распределяется по всей последовательности значений.
animate(".box", {
x: [0, 100, 50, 0]
}, {
duration: 2
})
Здесь вся траектория движения укладывается в 2 секунды. Motion One автоматически интерполирует промежуточные значения между ключевыми точками.
Чем больше длительность:
Длительность влияет не только на скорость, но и на распределение фаз анимации:
Хотя сам duration не задаёт кривую движения, он
масштабирует эффект easing-функции.
animate(".circle", {
scale: 1.5
}, {
duration: 1.2,
easing: "ease-out"
})
В этом случае easing определяет форму изменения, а duration — её временной масштаб.
В таймлайнах Motion One длительность становится частью общей композиции анимаций.
import { timeline } from "motion"
timeline([
[".a", { opacity: 1 }, { duration: 0.3 }],
[".b", { x: 100 }, { duration: 0.6 }],
[".c", { scale: 1.2 }, { duration: 1 }]
])
Каждый шаг таймлайна имеет собственную длительность, что позволяет выстраивать сложные последовательности с точной временной координацией.
При этом общая структура таймлайна формируется суммой и наложением этих значений.
Хотя duration отвечает только за активную фазу анимации,
он часто используется совместно с другими параметрами:
animate(".item", {
rotate: 180
}, {
duration: 0.7,
delay: 0.2,
repeat: 2
})
В таком случае:
duration определяет время одного циклаdelay смещает стартrepeat умножает общее время выполненияИтоговое время анимации становится функцией всех трёх параметров.
Длительность напрямую влияет на восприятие интерфейса:
Короткие значения (0.1–0.3s):
Средние значения (0.4–0.8s):
Длинные значения (1s+):
При работе с duration в Motion One важно учитывать
несколько технических аспектов:
Также следует учитывать, что длительность не компенсирует неправильный easing: даже идеально подобранное время может выглядеть неестественно при неподходящей кривой движения.
Одним из ключевых преимуществ Motion One является возможность легко масштабировать анимации:
const baseDuration = 0.4
animate(".panel", { opacity: 1 }, { duration: baseDuration })
animate(".panel", { x: 100 }, { duration: baseDuration * 1.5 })
Такой подход позволяет поддерживать единый ритм интерфейса, изменяя лишь базовые параметры без переработки всей логики анимации.