Последовательные анимации позволяют создавать сложные визуальные эффекты, когда одно действие плавно сменяет другое. В библиотеке SVG.js это достигается с помощью методов animate(), after() и цепочек вызовов. Основная идея заключается в том, что каждая анимация может быть поставлена в очередь и выполнена после завершения предыдущей.
Для начала необходимо создать элемент SVG и применить к нему простую анимацию:
const draw = SVG().addTo('body').size(500, 500);
const circle = draw.circle(50).fill('red').move(50, 50);
circle.animate(1000).move(200, 50);
Здесь создаётся красный круг и перемещается на 150 пикселей вправо за 1 секунду.
Ключевые моменты:
animate(duration) – задаёт длительность анимации в
миллисекундах.move, fill,
size, opacity) вызываются после
animate() для плавного перехода.Для последовательного выполнения нескольких анимаций используется
метод after() или цепочка вызовов
.animate().animate().
circle
.animate(1000).move(200, 50)
.animate(500).fill('blue')
.animate(1000).radius(80);
В этом примере:
Важно: каждая следующая анимация начинает выполнение после завершения предыдущей, обеспечивая полный контроль над последовательностью.
after()Метод after() позволяет запускать произвольную функцию
после завершения анимации:
circle.animate(1000).move(200, 50).after(() => {
circle.fill('green').animate(500).radius(100);
});
Преимущество after() в том, что можно запускать сложную
логику или динамически менять свойства элемента, создавая адаптивные
анимации.
Последовательные анимации могут включать несколько элементов и различные типы анимаций: перемещения, изменения размеров, прозрачности, цвета и даже трансформации.
const rect = draw.rect(100, 50).fill('orange').move(50, 150);
rect.animate(1000).move(200, 150).after(() => {
rect.animate(500).fill('purple').after(() => {
rect.animate(1000).rotate(180, 100, 25);
});
});
Здесь последовательность выглядит так:
SVG.js поддерживает плавные переходы с помощью кривых Безье через метод ease():
circle.animate(1000, '<>').move(300, 200);
ease() принимает параметры типа <,
>, <> для настройки ускорения и
замедления.Метод delay() позволяет вставлять паузы между анимациями:
circle
.animate(1000).move(200, 50).delay(500)
.animate(1000).fill('yellow');
Для создания сложных сцен часто требуется запускать анимации одновременно или с определённой задержкой для разных объектов:
const square = draw.rect(50, 50).fill('cyan').move(50, 300);
circle.animate(1000).move(300, 200);
square.animate(1000).move(200, 300).delay(500);
.animate(duration) — базовая анимация
элемента..after(callback) — выполнение
следующей анимации или логики после завершения текущей..delay(ms) — пауза перед началом
анимации..ease(type) — плавность движения.Последовательные анимации в SVG.js обеспечивают полный контроль над визуальной динамикой, позволяя создавать как простые эффекты, так и сложные анимационные сцены с несколькими объектами, различными стилями и синхронизацией.