Velocity.js — это высокопроизводительная библиотека для анимации в JavaScript, которая сочетает простоту jQuery-анимаций с мощью CSS-трансформаций и GPU-ускоренной анимации. Она обеспечивает точный контроль над анимацией, поддерживает цепочки вызовов, коллбэки, параллельные и последовательные анимации, а также сложные кривые временной функции (easing).
В отличие от стандартного метода element.style или
jQuery.animate(), Velocity.js использует
оптимизированные алгоритмы интерполяции, что позволяет
анимировать не только числовые свойства, но и трансформации и цвета с
высокой производительностью.
Velocity.js может быть подключен через CDN или локальный файл. Основной синтаксис для анимации выглядит так:
Velocity(element, {
properties: values,
options: settings
});
Пример базовой анимации перемещения элемента:
Velocity(document.getElementById("box"), {
left: "500px",
opacity: 0.5
}, {
duration: 1000,
easing: "ease-in-out"
});
Здесь duration задаёт продолжительность в миллисекундах,
а easing определяет кривую изменения значений с течением
времени.
Easing — это функция, определяющая темп изменения свойства во
времени. Velocity.js поддерживает как предустановленные функции
(linear, ease-in, ease-out,
ease-in-out), так и пользовательские кривые Безье:
Velocity(element, { width: "300px" }, { duration: 1000, easing: [0.42, 0, 0.58, 1] });
В массиве [x1, y1, x2, y2] задаются контрольные точки
кривой Безье, обеспечивая полный контроль над ускорением и замедлением
анимации.
Velocity.js позволяет анимировать CSS-трансформации напрямую без
использования дополнительных библиотек. Среди поддерживаемых
трансформаций: translateX, translateY,
scale, rotate и их комбинации:
Velocity(element, {
translateX: "200px",
rotateZ: "45deg",
scale: 1.5
}, { duration: 1200, easing: "ease-out" });
Эта функциональность делает Velocity.js более гибким инструментом по сравнению с jQuery, поскольку все трансформации выполняются на GPU, обеспечивая плавную анимацию даже на слабых устройствах.
Velocity.js поддерживает цепочки вызовов, позволяя
строить сложные последовательности анимаций. Используется метод
.then():
Velocity(element, { opacity: 0 }, { duration: 500 })
.then(() => Velocity(element, { translateY: "100px" }, { duration: 800 }))
.then(() => Velocity(element, { opacity: 1 }, { duration: 500 }));
Такой подход заменяет вложенные коллбэки, делая код более читаемым и управляемым.
Для одновременного запуска нескольких анимаций можно передавать массив элементов или использовать одно и то же свойство на разных элементах:
Velocity([element1, element2], { opacity: 0.5, left: "100px" }, { duration: 1000 });
Velocity.js автоматически оптимизирует выполнение и синхронизирует анимации, минимизируя нагрузку на основной поток браузера.
Velocity.js предоставляет гибкую систему коллбэков для управления анимациями:
begin — вызывается в начале анимацииprogress — вызывается в процессе анимацииcomplete — вызывается после завершения анимацииloop — вызывается при каждом повторении анимации (если
включён loop)Пример:
Velocity(element, { opacity: 0 }, {
duration: 800,
begin: () => console.log("Начало анимации"),
complete: () => console.log("Анимация завершена")
});
Velocity.js умеет анимировать CSS-цвета
(backgroundColor, color,
borderColor) и шрифтовые свойства. Цвета могут задаваться в
формате HEX, RGB или HSL, а Velocity.js автоматически интерполирует их
по шагам:
Velocity(element, { backgroundColor: "#ff0000" }, { duration: 1000 });
Для шрифтов можно анимировать fontSize,
letterSpacing и другие числовые свойства:
Velocity(element, { fontSize: "24px", letterSpacing: "2px" }, { duration: 1200 });
Velocity.UIVelocity.js включает модуль Velocity.UI, расширяющий
возможности за счёт предопределённых эффектов (fade,
slide, transition). Это ускоряет создание анимаций без ручного задания
всех свойств:
Velocity(element, "transition.fadeIn", { duration: 600 });
Velocity(element, "transition.slideDownIn", { duration: 800 });
Каждый эффект представляет собой заранее настроенную комбинацию CSS-свойств и easing-функций, что облегчает создание анимаций для интерфейсов.
duration — задаёт время анимацииdelay — задержка перед началомloop — повторение анимации указанное количество раз или
бесконечноПример бесконечной анимации:
Velocity(element, { rotateZ: "360deg" }, { duration: 2000, loop: true, easing: "linear" });
Velocity.js возвращает объект-подобный промис, что позволяет
использовать синтаксис async/await:
async function animateBox() {
await Velocity(element, { opacity: 0.5 }, { duration: 500 });
await Velocity(element, { translateX: "200px" }, { duration: 700 });
await Velocity(element, { opacity: 1 }, { duration: 500 });
}
Такой подход делает последовательные анимации легко читаемыми и масштабируемыми.
Velocity.js сочетает в себе простоту, высокую производительность и гибкость, предоставляя полное управление визуальными эффектами веб-страниц. Она подходит как для базовых анимаций, так и для сложных интерфейсных решений с большим количеством динамики и пользовательских эффектов.