Для работы с SVG.js необходимо создать основной контейнер SVG, в
котором будут размещаться все графические элементы. Контейнер создаётся
с помощью функции SVG():
const draw = SVG().addTo('body').size(600, 400);
addTo('body') — добавляет SVG в
указанный элемент DOM.size(width, height) — задаёт размеры
контейнера.После создания контейнера можно добавлять фигуры и применять к ним анимацию.
Анимация в SVG.js строится на цепочке вызовов через
метод animate(). Базовая форма:
element.animate(duration, easing).attr({x: 100, y: 50});
duration — длительность анимации в
миллисекундах.easing — функция сглаживания
(например, '<>', '<', '>', 'linear').attr() — обновление атрибутов элемента
во время анимации.Метод animate() создаёт объект анимации, позволяющий
использовать дополнительные функции:
loop(times, reverse) — повтор анимации
указанное количество раз; reverse задаёт чередование
движения.delay(ms) — задержка перед стартом
анимации.during(callback) — вызов функции на
каждом кадре анимации с аргументом pos (позиция от 0 до
1).SVG.js позволяет анимировать трансформации объектов: перемещение, вращение, масштабирование.
rect.animate(2000, '<>').move(200, 100).rotate(45).scale(1.5);
move(x, y) — перемещает элемент.rotate(angle, cx, cy) — вращение на
angle градусов относительно точки (cx, cy);
если не указаны, используется центр элемента.scale(factor) — масштабирование
относительно центра элемента.Трансформации можно комбинировать, и SVG.js корректно интерполирует их между кадрами анимации.
С помощью метода animate() можно менять свойства стиля,
такие как цвет заливки, цвет обводки,
прозрачность:
circle.animate(1000, '>').fill('#ff0000').stroke({color: '#000', width: 5}).opacity(0.5);
fill(color) — цвет заливки.stroke({color, width, opacity}) —
свойства обводки.opacity(value) — прозрачность
элемента.SVG.js автоматически интерполирует цвета между начальным и конечным состоянием.
Для сложных сценариев используется цепочка анимаций:
rect.animate(1000).move(200, 0)
.animate(500).rotate(90)
.animate(800).scale(1.2);
Каждая анимация стартует после завершения предыдущей. Для
параллельных анимаций используется метод animate().during()
без последовательного вызова:
rect.animate(2000).move(300, 100);
rect.animate(2000).fill('#00ff00');
Здесь обе анимации происходят одновременно.
Для более сложных движений применяются кривые Безье и пользовательские функции сглаживания:
element.animate(1500, '<>')
.attr({x: 300})
.during((pos) => {
element.attr({y: 200 * Math.sin(pos * Math.PI)});
});
pos варьируется от 0 до 1.move и rotate.SVG.js предоставляет методы для управления анимацией:
stop() — немедленно останавливает
анимацию.pause() / play() —
приостанавливает и возобновляет анимацию.finish() — завершает анимацию и
устанавливает конечное состояние.Пример:
let anim = rect.animate(3000).move(400, 200);
setTimeout(() => anim.pause(), 1500);
setTimeout(() => anim.play(), 2000);
Группировка объектов через group() позволяет анимировать
несколько элементов одновременно:
const group = draw.group();
group.add(rect).add(circle);
group.animate(2000).move(100, 50).rotate(30);
easing: '<>' (ease-in-out).loop(true, true).Анимации в SVG.js строятся на принципе интерполяции значений атрибутов и стилей, что позволяет создавать выразительные визуальные эффекты без сложного контроля кадров и рендеринга вручную.