Velocity.js предоставляет гибкий механизм для создания обратных
анимаций, позволяя возвращать элементы к исходному состоянию с
сохранением плавности и контроля над временными параметрами. Обратные
анимации реализуются через сочетание методов
velocity, объектов с анимационными
свойствами и колбэков, обеспечивая полный
контроль над последовательностью и синхронизацией эффектов.
reverseМетод reverse является ключевым инструментом для
обратных анимаций. Он применяется к уже выполненной анимации и
возвращает элемент в начальное состояние.
// Применение прямой анимации
$("#box").velocity({ opacity: 0.5, left: "200px" }, { duration: 1000 });
// Обратная анимация
$("#box").velocity("reverse");
Особенности метода reverse:
reverse возвращает элемент в состояние до последнего
вызова .velocity().duration,
easing и delay, чтобы изменить параметры
обратного движения..then(), позволяя
строить сложные последовательности анимаций.Velocity.js позволяет задавать индивидуальные параметры для обратного эффекта. При этом можно:
duration).easing).delay).$("#box")
.velocity({ left: "300px", opacity: 0.2 }, { duration: 1200 })
.velocity("reverse", { duration: 600, easing: "ease-in-out", delay: 200 });
В этом примере элемент сначала перемещается вправо с уменьшением прозрачности, а затем возвращается обратно быстрее, с другой кривой ускорения и с небольшой задержкой.
Velocity.js поддерживает создание последовательностей анимаций через массив объектов. Обратные анимации можно встроить в последовательность, обеспечивая возврат элементов после выполнения основной анимации.
var sequence = [
{ e: "#box", p: { left: "400px" }, o: { duration: 1000 } },
{ e: "#box", p: "reverse", o: { duration: 800 } }
];
$.Velocity.RunSequence(sequence);
Преимущества такого подхода:
Для динамических сценариев Velocity.js предоставляет возможность программного инвертирования анимаций. Это особенно полезно, когда анимационные свойства вычисляются в реальном времени.
var animProps = { left: "500px", top: "100px", opacity: 0.3 };
// Выполнение прямой анимации
$("#box").velocity(animProps, { duration: 1000 });
// Создание обратной анимации
var reverseProps = {};
for (var prop in animProps) {
reverseProps[prop] = $("#box").css(prop); // сохраняем текущее состояние
}
$("#box").velocity(reverseProps, { duration: 800 });
Такой подход гарантирует точное восстановление исходного состояния независимо от начальных параметров элемента.
Velocity.js поддерживает колбэки complete и
progress, которые позволяют выполнять действия после
завершения анимации или в процессе её выполнения. Для обратных анимаций
это удобно для запуска дополнительных эффектов или синхронизации с
другими элементами.
$("#box").velocity({ left: "300px" }, {
duration: 1000,
complete: function() {
$(this).velocity("reverse", {
duration: 600,
complete: function() {
console.log("Элемент вернулся в исходное состояние");
}
});
}
});
reverse с loopVelocity.js позволяет создавать циклические анимации, где элемент перемещается туда и обратно бесконечно или заданное количество раз.
$("#box").velocity({ left: "400px" }, { duration: 800, loop: 2, easing: "ease-in-out" });
Здесь элемент совершает анимацию туда и обратно два раза,
автоматически используя обратные переходы без необходимости явно
вызывать reverse.
Обратные анимации в Velocity.js корректно работают с любыми CSS-свойствами, включая transform и цветовые свойства. Для transform Velocity.js хранит внутренние состояния, что позволяет плавно инвертировать вращения, масштабирование и смещения:
$("#circle")
.velocity({ rotateZ: "45deg", scale: 1.5 }, { duration: 1000 })
.velocity("reverse", { duration: 800, easing: "ease-in-out" });
Для цвета используется плавная интерполяция RGB или HEX:
$("#box").velocity({ backgroundColor: "#ff0000" }, { duration: 1000 })
.velocity("reverse", { duration: 800 });
Для случаев, когда требуется, чтобы элемент остался в исходном
состоянии после обратной анимации, можно использовать флаг
display или дополнительные стили через
complete:
$("#box").velocity({ left: "300px" }, { duration: 1000 })
.velocity("reverse", {
duration: 800,
complete: function() {
$(this).css("background-color", "initial");
}
});
Velocity.js обеспечивает мощный и гибкий набор инструментов для
реализации обратных анимаций с контролем скорости, синхронизации и
точного восстановления исходных состояний. Использование методов
reverse, последовательностей, колбэков и динамического
инвертирования позволяет создавать сложные интерактивные эффекты с
минимальным кодом и высокой производительностью.