Velocity.js предоставляет мощный механизм для создания сложных
анимаций с помощью цепочек. Цепочки позволяют
объединять несколько анимаций последовательно или параллельно, управлять
их порядком выполнения и настраивать промежуточные эффекты без
необходимости использовать setTimeout или сложные
коллбэки.
Для последовательного выполнения нескольких анимаций используется
метод Velocity с массивом объектов
анимаций, где каждая следующая анимация стартует после
завершения предыдущей:
Velocity(element, { opacity: 0 }, { duration: 500 })
.then(() => Velocity(element, { translateX: "100px" }, { duration: 700 }))
.then(() => Velocity(element, { rotateZ: "45deg" }, { duration: 600 }));
Особенности последовательного выполнения:
Velocity возвращает
Promise.then() позволяет выполнять следующую анимацию только
после завершения предыдущей.Velocity.js позволяет запускать несколько анимаций одновременно, используя один объект с несколькими свойствами:
Velocity(element, {
opacity: 1,
translateX: "200px",
rotateZ: "90deg"
}, { duration: 1000 });
Параллельные анимации обеспечивают:
duration,
easing и delay.sequenceДля управления цепочками анимаций можно использовать параметр
sequence, который принимает массив анимаций с указанием
цели и опций:
Velocity.RunSequence([
{ e: element, p: { opacity: 0 }, o: { duration: 500 } },
{ e: element, p: { translateX: "100px" }, o: { duration: 700 } },
{ e: element, p: { rotateZ: "45deg" }, o: { duration: 600 } }
]);
Преимущества RunSequence:
delay).complete.Velocity.js поддерживает задержки и управление длительностью каждой анимации:
Velocity(element, { opacity: 0 }, { duration: 400, delay: 200 })
.then(() => Velocity(element, { scale: 1.5 }, { duration: 600, easing: "easeInOut" }));
delay задает паузу перед стартом анимации.duration определяет длительность перехода.easing управляет темпом анимации (например,
linear, easeIn, easeOut).Цепочки могут быть вложенными, что позволяет строить сложные анимационные сценарии:
Velocity(element, { opacity: 0 }, { duration: 300 })
.then(() => {
return Velocity.RunSequence([
{ e: element, p: { translateX: "50px" }, o: { duration: 400 } },
{ e: element, p: { rotateZ: "30deg" }, o: { duration: 400 } }
]);
})
.then(() => Velocity(element, { opacity: 1 }, { duration: 500 }));
Velocity.js поддерживает несколько типов коллбэков:
begin — срабатывает перед началом анимации.progress — вызывается во время анимации с процентом
завершения.complete — вызывается после завершения анимации.Пример с коллбэками в цепочке:
Velocity(element, { opacity: 0 }, {
duration: 500,
complete: () => console.log("Скрытие завершено")
})
.then(() => Velocity(element, { translateX: "100px" }, {
duration: 700,
progress: (elements, percent) => console.log(percent)
}));
progress можно использовать для динамического
обновления интерфейса.Velocity.js позволяет останавливать или прерывать
цепочки с помощью метода stop:
Velocity(element, { opacity: 1 }, { duration: 1000 });
Velocity(element).stop();
stop() мгновенно прекращает текущую анимацию.true как аргумент для завершения
анимации до конца (finish: true).Цепочки можно комбинировать с добавлением и удалением CSS-классов для создания комплексных визуальных эффектов:
Velocity(element, { opacity: 0 }, { duration: 400 })
.then(() => {
element.classList.add("highlight");
return Velocity(element, { translateY: "50px" }, { duration: 600 });
});
Цепочки анимаций в Velocity.js обеспечивают максимальный контроль над порядком, временем и синхронизацией анимаций. Их использование делает код динамичным, легко поддерживаемым и позволяет создавать профессиональные интерфейсы с минимальными усилиями.