Метод animate() является ключевым инструментом для
создания анимаций в Snap.svg. Он позволяет плавно изменять свойства
SVG-элементов с контролем времени, задержки и кривых анимации.
Использование этого метода обеспечивает динамичность и интерактивность
графических элементов в веб-приложениях.
element.animate(attrs, duration, easing, callback)
attrs — объект с набором свойств,
которые должны измениться. Например, координаты, размеры, цвет и другие
атрибуты SVG.duration — длительность анимации в
миллисекундах.easing — функция сглаживания движения
(необязательный параметр). Snap.svg поддерживает стандартные кривые:
mina.linear, mina.easein,
mina.easeout, mina.easeinout.callback — функция, вызываемая после
завершения анимации (необязательный параметр).Пример:
var circle = s.circle(50, 50, 40);
circle.animate({ cx: 150, cy: 150, r: 30 }, 1000, mina.easeinout, function() {
console.log("Анимация завершена");
});
animate()Метод animate() может работать с большинством атрибутов
SVG:
cx,
cy, r, x, y,
width, heightfill,
stroke, stroke-widthopacitytransformПример изменения трансформации:
rect.animate({ transform: "r45,100,100 s1.5" }, 1500, mina.easeout);
В этом примере выполняется поворот на 45° вокруг точки (100, 100) и масштабирование в 1.5 раза.
Snap.svg использует библиотеку Mina для интерполяции значений. Основные типы кривых:
mina.linear — линейное движениеmina.easein — замедление в начале
анимацииmina.easeout — замедление в концеmina.easeinout — плавное ускорение и
замедлениеПример с различными кривыми:
circle.animate({ cx: 200 }, 1000, mina.easein);
circle.animate({ cx: 50 }, 1000, mina.easeout);
animate() поддерживает цепочку вызовов через callback,
что позволяет создавать сложные последовательные анимации.
circle.animate({ cx: 200 }, 1000, mina.linear, function() {
circle.animate({ cy: 200 }, 1000, mina.easeinout);
});
Для параллельных анимаций достаточно вызвать animate()
для разных свойств или разных элементов одновременно.
Анимация цвета происходит через плавную интерполяцию между исходным и конечным цветом.
rect.animate({ fill: "#ff0000", stroke: "#0000ff" }, 2000, mina.easeinout);
Snap.svg автоматически преобразует цвета в формат RGB и интерполирует компоненты для создания плавного перехода.
Анимацию можно остановить в любой момент с помощью метода
stop():
circle.animate({ cx: 200 }, 2000, mina.linear);
circle.stop(); // мгновенно прекращает анимацию
Метод stop() полезен для интерактивных сценариев, когда
необходимо отменить текущую анимацию и задать новую.
Метод animate() позволяет комбинировать трансформации:
смещение, поворот, масштабирование и наклон.
circle.animate({ transform: "t100,0 r45 s2" }, 1500, mina.easeinout);
Здесь выполняется последовательная комбинация:
t100,0 — сдвиг по Xr45 — поворот на 45°s2 — масштабирование в 2 разаSnap.svg корректно интерполирует эти параметры, создавая плавную анимацию.
Для числовых атрибутов (например, r, cx,
cy) Snap.svg выполняет линейную интерполяцию значений. При
необходимости создания нелинейных анимаций можно использовать кривые
Mina и комбинировать их с функцией callback для получения эффекта
ускорения, замедления или отскока.
circle.animate({ r: 60 }, 500, mina.easeinout, function() {
circle.animate({ r: 40 }, 500, mina.easeinout, arguments.callee);
});
rect.animate({ transform: "t150,150 r90" }, 2000, mina.easeinout);
rect.animate({ fill: "#00ff00", opacity: 0.5 }, 1000, mina.easein);
Метод animate() в Snap.svg обеспечивает мощный и гибкий
инструмент для работы с динамическими графическими эффектами. Он
объединяет плавное изменение атрибутов, управление временем, кривые
анимации и последовательные трансформации, позволяя создавать сложные
визуальные сценарии с минимальным количеством кода.