SVG.js предоставляет гибкий и мощный механизм для создания и управления анимациями SVG-элементов. Одним из ключевых аспектов работы с анимациями является возможность запуска нескольких анимаций одновременно, то есть параллельных анимаций. Такой подход позволяет создавать сложные визуальные эффекты, синхронизировать движения объектов и изменять несколько свойств одновременно.
В SVG.js параллельные анимации создаются через вызов метода
.animate() на одном и том же элементе несколько раз, либо
через объединение различных элементов в общий контейнер. Например:
const draw = SVG().addTo('body').size(600, 400);
const rect = draw.rect(100, 100).fill('red');
rect.animate(2000).move(300, 0); // анимация перемещения
rect.animate(2000).fill('blue'); // анимация изменения цвета
В этом примере обе анимации запускаются одновременно и независимо
друг от друга, так как каждая анимация создается отдельным вызовом
.animate().
Важно: Если вызвать несколько анимаций на одно и то
же свойство, то последняя перезапишет предыдущую. Для одновременного
изменения нескольких свойств используется один вызов
.animate() с объектом свойств:
rect.animate(2000).attr({ x: 300, fill: 'blue' });
SVG.js поддерживает построение цепочек анимаций через
.animate().after() или .animate().loop().
Чтобы несколько анимаций выполнялись параллельно внутри цепочки,
необходимо использовать группировку элементов или
комбинировать .animate() с разными элементами:
const circle1 = draw.circle(50).fill('green').move(0, 0);
const circle2 = draw.circle(50).fill('orange').move(100, 0);
circle1.animate(1000).move(200, 200);
circle2.animate(1000).move(200, 0);
Обе анимации начнутся одновременно и выполняются независимо, что позволяет создавать сложные синхронизированные эффекты.
SVG.js предоставляет возможность объединять элементы в
group(), что облегчает управление параллельными
анимациями:
const group = draw.group();
const rect1 = group.rect(50, 50).fill('red');
const rect2 = group.rect(50, 50).fill('blue').move(60, 0);
group.animate(2000).transform({ rotate: 180 });
rect1.animate(2000).move(100, 0);
rect2.animate(2000).move(100, 50);
В этом примере группа поворачивается одновременно с индивидуальными перемещениями прямоугольников, что демонстрирует возможности параллельного контроля над трансформациями и позиционированием объектов.
Для создания более сложных параллельных эффектов важно контролировать время начала анимации и задержку:
rect.animate(1000).move(300, 0).delay(500); // задержка перед стартом
rect.animate(1000).fill('yellow'); // начинается сразу
.delay(ms) откладывает начало конкретной анимации..duration(ms) задает продолжительность анимации.delay позволяет
синхронизировать или расставлять анимации во времени.Каждая анимация может иметь свою функцию сглаживания движения
(easing), что позволяет создавать естественные и
разнообразные эффекты:
rect.animate(1500, '<>').move(300, 0); // ease-in-out
rect.animate(1500, '>').fill('green'); // ease-out
'<>' – плавное ускорение и замедление'>' – ускорение в начале'<' – замедление в конце'linear' – равномерное движениеИспользование различных easing-функций для параллельных анимаций делает визуальные эффекты более динамичными и выразительными.
SVG.js позволяет комбинировать параллельные анимации с
последовательными через .after():
rect.animate(1000).move(300, 0); // параллельная
rect.animate(1000).fill('purple').after(rect); // последовательная после перемещения
Таким образом, можно смешивать одновременно выполняющиеся эффекты и цепочки событий, управляя сложными визуальными сценариями.
Параллельные анимации в SVG.js открывают возможности для
профессиональной работы с визуализацией. Гибкость методов
.animate(), .delay(), .after() и
использование групп позволяет создавать сложные, многослойные и
динамичные SVG-сцены, полностью контролируя движение, цвет и
трансформации объектов одновременно.