В Snap.svg easing-функции управляют динамикой анимации: как изменяются значения атрибутов объекта во времени. Они определяют скорость и характер движения, придавая анимации реалистичность и плавность.
В Snap.svg анимации создаются методом animate(), где
easing-функция указывается третьим аргументом:
element.animate({ cx: 200 }, 1000, mina.linear);
Здесь mina.linear — встроенная easing-функция.
Snap.svg использует библиотеку Mina, предоставляющую набор стандартных easing-функций:
mina.linear Прямая, равномерная
анимация. Значение атрибута изменяется с постоянной скоростью.
Пример:
circle.animate({ cx: 300 }, 1000, mina.linear);mina.easein Начало движения
медленное, ускорение к концу. Полезно для эффектов «разгона». Формула
аппроксимирует квадратичное ускорение.
mina.easeout Начало движения
быстрое, замедление к концу. Используется для эффектов
«торможения».
mina.easeinout Комбинация easein и
easeout: плавное начало и конец, ускорение посередине. Идеально для
симметричных анимаций.
mina.backin / mina.backout /
mina.backinout Движение с небольшим «отскоком».
backin начинается с обратного движения,
backout завершает с отскоком, backinout
сочетает оба. Применяется для создания эффекта «упругости».
mina.elastic Имитация пружинного
движения с колебаниями. Подходит для объектов, которые «подпрыгивают»
перед остановкой.
mina.bounce Эффект падения с
отскоками, как мяч. Применяется для анимаций с визуальным физическим
взаимодействием.
Easing можно использовать для любых анимируемых свойств: координат, размеров, прозрачности, цвета.
rect.animate({ width: 200, height: 100, fill: "#f06" }, 1500, mina.easeinout);
Здесь анимация изменяет сразу несколько атрибутов с плавным ускорением и замедлением.
Можно последовательно применять различные easing для сложных анимационных цепочек:
circle.animate({ cx: 400 }, 1000, mina.easein, function() {
this.animate({ cy: 200 }, 1000, mina.easeout);
});
Первое движение ускоряется к концу, второе замедляется. Такая последовательность создает ощущение органичного движения.
Snap.svg позволяет создавать кастомные функции на базе Mina:
var customEase = mina(function(t) {
return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;
});
circle.animate({ cx: 300 }, 1200, customEase);
Функция принимает параметр t от 0 до 1 и возвращает
значение прогресса анимации. Это открывает возможности для точной
настройки кривой ускорения.
Использование правильной функции easing делает анимацию естественной и визуально приятной, а сочетание разных функций позволяет создавать сложные движения без дополнительной логики.
linear или easeinout, чтобы движение не
казалось резким.bounce или elastic.easeinout или комбинации
easein/easeout.backin или elastic, чтобы не отвлекать
пользователя.Правильное применение easing-функций в Snap.svg позволяет управлять визуальной динамикой объектов, делая интерфейс или анимацию интерактивной и эстетически привлекательной.