Библиотека Motion One представляет собой лёгкий инструмент анимации для веба, построенный вокруг Web Animations API и ориентированный на минимальный размер, высокую производительность и предсказуемое поведение анимаций в современных браузерах. В отличие от крупных анимационных фреймворков, она не пытается абстрагировать весь процесс разработки интерфейсов, а фокусируется на точечном управлении анимациями DOM-элементов и их композиции.
Основная идея Motion One заключается в том, чтобы использовать нативные возможности браузера, минимизируя слой собственной логики. Это делает библиотеку особенно эффективной в проектах, где важны скорость загрузки, плавность анимаций и отсутствие тяжёлых runtime-зависимостей.
Motion One построена поверх Web Animations API, который предоставляет браузерам нативный способ создания анимаций без использования CSS-ключевых кадров или постоянных JavaScript-таймеров.
Ключевая архитектурная особенность:
Element.animateВ отличие от решений, которые создают собственный движок рендеринга, Motion One передаёт максимум работы браузеру, снижая нагрузку на main thread.
В основе лежит функция animate, которая принимает
элемент и набор свойств анимации.
Простейшая модель:
import { animate } from "motion";
animate(
document.querySelector(".box"),
{ x: 300, opacity: 0 },
{ duration: 0.8, easing: "ease-out" }
);
Здесь:
Motion One автоматически преобразует эти значения в keyframes и использует нативный движок браузера.
Библиотека поддерживает явное определение keyframes, что позволяет создавать более сложные анимации.
animate(
".box",
{ x: [0, 100, -50, 0], opacity: [1, 0.5, 1] },
{ duration: 1.2 }
);
Особенности:
Это позволяет создавать сложные движения без ручного расчёта таймингов.
Easing определяет характер изменения анимации во времени.
Motion One поддерживает:
Пример:
animate(
".box",
{ scale: 1.5 },
{ duration: 0.6, easing: "cubic-bezier(.25,.8,.25,1)" }
);
Easing напрямую передаётся в Web Animations API, что делает поведение максимально близким к нативному.
Motion One позволяет одновременно управлять несколькими CSS-свойствами:
animate(
".card",
{
x: 120,
rotate: 15,
opacity: 0.8,
scale: 1.1
},
{
duration: 0.5
}
);
Поддерживаются как трансформации (translate, scale, rotate), так и обычные CSS-параметры (opacity, backgroundColor, filter и др.).
Motion One предоставляет механизм последовательного управления анимациями через timeline.
import { timeline } from "motion";
timeline([
[".box", { x: 100 }, { duration: 0.4 }],
[".box", { y: 100 }, { duration: 0.4 }],
[".box", { opacity: 0 }, { duration: 0.3 }]
]);
Особенности:
Это позволяет строить сложные интерфейсные сценарии без ручного
управления setTimeout.
Motion One интегрируется с прокруткой страницы, позволяя связывать прогресс анимации со скроллом.
import { scroll } from "motion";
scroll(
animate(".box", { scale: [0, 1] }),
{
target: document.querySelector(".section")
}
);
Суть механизма:
Одно из ключевых преимуществ Motion One — минимальная нагрузка на JavaScript-движок.
Причины высокой производительности:
В результате:
Motion One поддерживает широкий набор типов значений:
{x: 100, opacity: 0.5}
{ backgroundColor: "#ff0000" }
{ rotate: 45, scale: 1.2 }
{x: "100%"}
Motion One позволяет работать не только с конкретными элементами, но и с CSS-селекторами:
animate(
".item",
{ opacity: 0 },
{ duration: 0.3 }
);
В этом случае анимация применяется ко всем совпадающим элементам.
Также поддерживается массив элементов:
animate(
document.querySelectorAll(".item"),
{ y: 50 }
);
Motion One занимает промежуточную позицию между низкоуровневым Web Animations API и крупными UI-ориентированными библиотеками.
Основные отличия:
В отличие от более комплексных решений, здесь отсутствует концепция виртуального дерева или декларативных компонентов анимации.
Каждая анимация в Motion One проходит следующие этапы:
Element.animateЭта модель делает поведение предсказуемым и близким к нативному CSS-анимированию, но с расширенными возможностями JavaScript.