Velocity.js предоставляет низкоуровневый доступ к анимациям, позволяя обходиться без сторонних фреймворков и интегрироваться напрямую с DOM API. Такой подход обеспечивает максимальную гибкость, прозрачность выполнения и полный контроль над жизненным циклом анимации.
При использовании без сборщиков библиотека подключается через
<script> и становится доступной глобально:
<script src="velocity.min.js"></script>
После этого основной API доступен через функцию
Velocity.
Базовый вызов имеет следующий вид:
Velocity(element, properties, options);
Пример:
const box = document.querySelector('.box');
Velocity(box, {
opacity: 1,
translateX: '200px'
}, {
duration: 1000,
easing: 'ease-in-out'
});
Velocity.js принимает различные типы коллекций:
// Один элемент
Velocity(document.getElementById('item'), { opacity: 0 });
// NodeList
Velocity(document.querySelectorAll('.items'), { scale: 1.2 });
// Массив
Velocity([el1, el2, el3], { rotateZ: '45deg' });
Библиотека автоматически нормализует входные данные, избавляя от необходимости ручной итерации.
Velocity.js расширяет стандартный CSS, позволяя работать с трансформациями напрямую:
Velocity(el, {
translateX: '50px',
translateY: '100px',
scale: 1.5,
rotateZ: '180deg'
});
Ключевые особенности:
transformVelocity автоматически интерполирует значения:
Velocity(el, {
width: '300px', // px
opacity: 0.5, // число
rotateZ: '90deg' // градусы
});
Если начальное значение отсутствует, библиотека вычисляет его через
getComputedStyle.
Объект options предоставляет широкий набор настроек:
Velocity(el, { opacity: 1 }, {
duration: 500,
delay: 100,
easing: 'linear',
loop: 2
});
Позволяют встроить анимацию в бизнес-логику:
Velocity(el, { opacity: 1 }, {
begin: () => {
console.log('Старт');
},
complete: () => {
console.log('Завершение');
}
});
Velocity поддерживает последовательное выполнение через Promise:
Velocity(el, { opacity: 0 })
.then(() => Velocity(el, { translateX: '100px' }))
.then(() => Velocity(el, { scale: 2 }));
Альтернативный вариант — массив:
Velocity(el, [
{ opacity: 0 },
{ translateX: '100px' },
{ scale: 2 }
]);
По умолчанию анимации ставятся в очередь:
Velocity(el, { opacity: 0 });
Velocity(el, { opacity: 1 });
Они выполнятся последовательно.
Отключение очереди:
Velocity(el, { opacity: 0 }, { queue: false });
Создание пользовательской очереди:
Velocity(el, { opacity: 0 }, { queue: 'custom' });
Velocity(el, { translateX: '50px' }, { queue: 'custom' });
Velocity.Utilities.dequeue(el, 'custom');
Velocity предоставляет методы контроля:
Velocity(el, 'stop');
Velocity(el, 'finish');
Velocity(el, 'pause');
Velocity(el, 'resume');
Velocity может управлять видимостью:
Velocity(el, { opacity: 1 }, { display: 'block' });
Velocity(el, { opacity: 0 }, { display: 'none' });
Это избавляет от ручного переключения CSS.
Поддержка прокрутки:
Velocity(document.body, 'scroll', {
offset: 300,
duration: 800
});
Для контейнеров:
Velocity(container, 'scroll', {
container: container,
offset: 200
});
Velocity интерполирует цвета:
Velocity(el, {
backgroundColor: '#ff0000',
color: '#ffffff'
});
Поддерживаются:
Можно задавать собственные кривые:
Velocity(el, { translateX: '100px' }, {
easing: [0.42, 0, 0.58, 1] // cubic-bezier
});
Или использовать spring:
Velocity(el, { translateX: '100px' }, {
easing: 'spring'
});
Velocity автоматически группирует операции, снижая количество reflow:
Velocity(elements, { opacity: 0.5 });
Рекомендуется использовать:
вместо:
Это снижает нагрузку на layout.
Velocity использует requestAnimationFrame внутри,
обеспечивая:
Поддержка SVG-элементов:
Velocity(svgPath, {
strokeDashoffset: 0
});
Velocity позволяет обращаться к вложенным свойствам:
Velocity(el, {
translateX: '100px',
rotateZ: '45deg'
});
Внутренне это превращается в:
transform: translateX(...) rotateZ(...)
Вместо CSS-классов можно управлять состояниями напрямую:
function show(el) {
Velocity(el, { opacity: 1, scale: 1 });
}
function hide(el) {
Velocity(el, { opacity: 0, scale: 0.8 });
}
Совместимо с async/await:
async function animate() {
await Velocity(el, { opacity: 0 });
await Velocity(el, { opacity: 1 });
}
Можно изменить поведение по умолчанию:
Velocity.defaults.duration = 400;
Velocity.defaults.easing = 'ease-in';
Velocity содержит вспомогательные методы:
Velocity.Utilities.each(elements, (i, el) => {
console.log(el);
});
Velocity легко комбинируется с обработчиками событий:
button.addEventListener('click', () => {
Velocity(panel, { height: '200px' });
});
Или с MutationObserver:
const observer = new MutationObserver(() => {
Velocity(el, { opacity: 1 });
});
Значения могут быть функциями:
Velocity(el, {
width: () => window.innerWidth / 2
});
Velocity учитывает текущее состояние:
Velocity(el, 'fadeIn');
Velocity(el, 'fadeOut');
Это шорткаты встроенных эффектов.
const fadeIn = {
opacity: 1,
duration: 300
};
Velocity(el1, fadeIn);
Velocity(el2, fadeIn);
Vanilla-подход предполагает:
Пример модуля:
export function animateOpen(el) {
return Velocity(el, {
height: '200px',
opacity: 1
});
}
Velocity поддерживает логирование:
Velocity.debug = true;
Это позволяет отслеживать:
В результате Velocity.js в сочетании с чистым JavaScript становится мощным инструментом для создания сложных анимаций без необходимости подключения тяжёлых UI-фреймворков.