В Motion One управление временем является одной из ключевых
возможностей библиотеки. Помимо длительности, easing-функций и ключевых
кадров, важную роль играет параметр, отвечающий за отсрочку запуска
анимации. Он позволяет управлять моментом начала эффекта относительно
момента вызова animate() или изменения состояния в
motion.
Задержка задаётся через параметр delay. Его значение
выражается в миллисекундах и определяет, сколько времени должно пройти
до начала анимации после её инициализации.
import { animate } from "motion";
animate(
".box",
{ opacity: [0, 1] },
{ delay: 500 }
);
В этом примере анимация изменения прозрачности не начнётся сразу, а будет отложена на 500 мс. До истечения этого времени элемент остаётся в начальном состоянии.
При вызове animate() Motion One создаёт внутренний
таймер, который управляет запуском анимационного цикла. Параметр
delay не влияет на длительность анимации, а лишь сдвигает
момент старта.
Общая временная модель выглядит следующим образом:
Такое разделение позволяет точно синхронизировать сложные последовательности эффектов.
До начала анимации элемент находится в состоянии, определённом первой ключевой точкой. Например, в случае:
animate(
".box",
{ transform: ["translateX(0px)", "translateX(200px)"] },
{ delay: 1000, duration: 800 }
);
элемент остаётся в положении translateX(0px) в течение
одной секунды. Только после этого начинается переход ко второй
точке.
Важно, что Motion One заранее применяет начальные стили, чтобы избежать визуальных скачков при запуске таймера.
Одно из основных применений delay — построение цепочек
анимаций без использования внешних управляющих структур.
animate(".item-1", { opacity: [0, 1] }, { delay: 0 });
animate(".item-2", { opacity: [0, 1] }, { delay: 200 });
animate(".item-3", { opacity: [0, 1] }, { delay: 400 });
Каждый следующий элемент стартует позже предыдущего, формируя ступенчатое появление.
Такой подход часто используется в интерфейсах, где требуется последовательное раскрытие списка или меню.
Параметры delay и duration независимы друг
от друга, но вместе формируют полную временную модель анимации.
animate(
".panel",
{ opacity: [0, 1], y: [20, 0] },
{ delay: 300, duration: 600 }
);
Итоговое время жизни анимации составляет 900 мс, но визуально движение начинается только после задержки.
Motion One поддерживает отрицательные значения delay.
Такой приём используется для имитации «догоняющего» состояния анимации,
когда эффект стартует не с начала, а с уже прошедшего времени.
animate(
".box",
{ x: [0, 300] },
{ delay: -200, duration: 1000 }
);
В этом случае анимация сразу начинает воспроизводиться с позиции, соответствующей 200 мс её выполнения. Эффект выглядит так, будто анимация уже некоторое время идёт до момента отображения.
При использовании ключевых кадров задержка применяется ко всей последовательности, а не к отдельным шагам.
animate(
".box",
{ x: [0, 100, 200, 0] },
{ delay: 400, duration: 1200 }
);
Здесь весь набор переходов начнётся только после 400 мс ожидания, после чего равномерно распределится по заданной длительности.
Параметр delay может быть вычисляемым, что позволяет
создавать контекстно-зависимые сценарии запуска.
animate(
".item",
{ opacity: [0, 1] },
{
delay: (i) => i * 100
}
);
В этом случае каждый элемент списка получает собственную задержку, зависящую от его индекса. Это позволяет формировать каскадные эффекты без ручного указания времени для каждого элемента.
Сам по себе delay не увеличивает нагрузку на систему,
поскольку представляет собой лишь отложенный запуск таймера. Однако
большое количество независимых задержек в сложных сценах может привести
к накоплению активных таймеров, что особенно заметно при массовой
анимации DOM-элементов.
Оптимизация в подобных случаях достигается через группировку анимаций или использование единых управляющих структур.
При работе с несколькими анимациями важно учитывать относительную
синхронизацию задержек. Motion One не требует общего таймлайна, но
позволяет выстраивать его вручную через согласованные значения
delay.
animate(".header", { opacity: [0, 1] }, { delay: 0 });
animate(".content", { opacity: [0, 1] }, { delay: 300 });
animate(".footer", { opacity: [0, 1] }, { delay: 600 });
Такой подход создаёт визуальный ритм, где каждый элемент вступает в анимацию строго по заданному интервалу.
Задержка может использоваться вместе с внешними событиями, формируя
гибкие сценарии запуска. В таких случаях delay становится
дополнительным смещением относительно события, а не абсолютной
паузой.
button.addEventListener("click", () => {
animate(".modal", { scale: [0.8, 1] }, { delay: 150 });
});
Даже при мгновенном срабатывании события анимация будет дополнительно смещена во времени.
В отличие от более тяжёлых анимационных библиотек, Motion One
обрабатывает задержку максимально напрямую, без промежуточных слоёв
планировщиков. Это делает поведение delay
предсказуемым:
Такая модель обеспечивает стабильность поведения даже при большом количестве параллельных анимаций.