Библиотека SVG.js изначально предоставляет базовые возможности работы с SVG-элементами, однако для создания сложных анимаций часто используют плагины. Один из самых известных — это SVG.js Animations (svg.animation.js), который расширяет стандартный функционал анимации SVG.js. Он позволяет:
x, y, width, height,
fill, stroke;ease;.after() и .during().Пример анимации круга:
const draw = SVG().addTo('body').size(300, 300);
const circle = draw.circle(100).fill('red').move(50, 50);
circle.animate(2000, '<>')
.move(150, 150)
.fill('blue');
Здесь '<>' — это функция easing, которая задаёт
плавность движения.
Для интерактивного перемещения элементов применяют плагин
SVG.draggable. Он добавляет элементу возможность
перетаскивания мышью и поддерживает различные события:
dragstart, dragmove, dragend.
Пример использования:
const rect = draw.rect(100, 100).fill('green').move(50, 50);
rect.draggable().on('dragmove', (event) => {
console.log(`Новая позиция: x=${event.detail.box.x}, y=${event.detail.box.y}`);
});
Плагин автоматически обрабатывает ограничения по координатам, что позволяет задавать зону перемещения для элемента.
Плагин SVG.select.js расширяет возможности работы с множественными элементами SVG. Он позволяет:
Пример группового выделения и трансформации:
const rect1 = draw.rect(50, 50).fill('orange').move(10, 10);
const rect2 = draw.rect(50, 50).fill('purple').move(70, 10);
const selection = draw.select().add(rect1).add(rect2);
selection.transform({ rotate: 45, cx: 35, cy: 35 });
Плагин упрощает создание интерактивных редакторов SVG прямо в браузере.
Для применения фильтров и эффектов к элементам существует плагин SVG.filter.js. С его помощью можно создавать:
feGaussianBlur, feColorMatrix,
feOffset).Пример размытия:
const rect = draw.rect(100, 100).fill('red').move(50, 50);
const blur = draw.filter().blur(5);
rect.filterWith(blur);
Фильтры могут быть анимированы, что расширяет возможности визуальных эффектов.
Плагин SVG.path.js обеспечивает работу с пути (path):
length());pointAt()).Пример анимации вдоль пути:
const path = draw.path('M10 80 C 40 10, 65 10, 95 80').fill('none').stroke({ width: 2 });
const circle = draw.circle(10).fill('blue');
circle.animate(3000).during((pos, morph, eased) => {
const p = path.pointAt(path.length() * eased);
circle.center(p.x, p.y);
});
Так можно создавать динамические движения объектов по кривым и сложным траекториям.
Хотя базовая библиотека поддерживает простые easing-функции, плагин SVG.easing.js добавляет расширенные кривые ускорения: elastic, bounce, back. Это позволяет создавать реалистичные и эффектные анимации.
Пример:
circle.animate(2000, 'bounce').move(150, 150);
Эффект «прыжка» делает движение более живым и органичным.
SVG.js поддерживает одновременное подключение нескольких плагинов, что позволяет комбинировать:
svg.animation.js);svg.draggable.js);svg.filter.js);svg.path.js).Комбинирование плагинов создаёт полноценную интерактивную графику в браузере, управляемую через JavaScript, без необходимости сторонних фреймворков.
Эта гибкость делает SVG.js одной из самых мощных библиотек для работы с векторной графикой на клиентской стороне.