Для работы с Snap.svg сначала необходимо создать объект холста,
который будет контейнером для всех элементов SVG. Это делается с помощью
функции Snap():
var s = Snap(800, 600); // создаёт SVG холст шириной 800px и высотой 600px
Можно также привязать холст к существующему элементу DOM:
var s = Snap("#mySvg"); // привязывает Snap к элементу <svg id="mySvg"></svg>
После создания холста на нём можно размещать любые графические объекты: линии, прямоугольники, круги, пути и текст.
Прямоугольник
var rect = s.rect(50, 50, 200, 100); // x, y, ширина, высота
rect.attr({
fill: "#3498db",
stroke: "#2c3e50",
strokeWidth: 5
});
Круг
var circle = s.circle(400, 200, 80); // cx, cy, радиус
circle.attr({
fill: "red",
stroke: "black",
strokeWidth: 3
});
Линия
var line = s.line(100, 300, 700, 300); // x1, y1, x2, y2
line.attr({
stroke: "#27ae60",
strokeWidth: 4
});
Эллипс
var ellipse = s.ellipse(600, 400, 100, 50); // cx, cy, rx, ry
ellipse.attr({
fill: "#f1c40f",
stroke: "#e67e22",
strokeWidth: 2
});
Snap.svg предоставляет мощный инструмент для создания сложных форм с
помощью путей (path). Путь задаётся строкой, содержащей
команды SVG.
var path = s.path("M150 0 L75 200 L225 200 Z"); // M – move, L – line, Z – закрыть
path.attr({
fill: "#9b59b6",
stroke: "#8e44ad",
strokeWidth: 4
});
Для более сложных кривых используется команда C
(кубическая кривая Безье):
var bezier = s.path("M100 250 C 150 100, 350 100, 400 250");
bezier.attr({
fill: "none",
stroke: "#e74c3c",
strokeWidth: 5
});
Группы позволяют объединять элементы и управлять ими как единым
объектом. Создание группы осуществляется методом
group():
var rect1 = s.rect(0, 0, 100, 50);
var circle1 = s.circle(50, 25, 20);
var group = s.group(rect1, circle1);
group.attr({
fill: "#1abc9c",
stroke: "#16a085",
strokeWidth: 2
});
// Перемещение всей группы
group.transform('t200,150'); // t — translate
Группы поддерживают трансформации (translate,
rotate, scale) и наследуют стили элементов,
если задано на уровне группы.
Трансформации
Snap.svg позволяет применять комплексные трансформации:
circle.transform("t100,50 r45 s1.5,1.5");
// t — перенос, r — поворот, s — масштаб
Трансформации можно комбинировать и анимировать плавно.
Анимации
Метод animate() позволяет изменять атрибуты элемента с
заданной длительностью и функцией интерполяции:
rect.animate({x: 300, y: 200, fill: "#e67e22"}, 1000, mina.easeinout);
Snap.svg использует библиотеку анимаций mina, которая
обеспечивает линейные, ease-in, ease-out и другие типы интерполяций.
Создание текстовых элементов осуществляется через
text():
var text = s.text(100, 100, "Snap.svg Example");
text.attr({
fontSize: 24,
fontFamily: "Arial",
fill: "#34495e"
});
Текст поддерживает базовые стили CSS и может быть анимирован или преобразован вместе с графическими элементами.
Snap.svg позволяет добавлять фильтры SVG для создания теней, размытия и других эффектов. Пример создания тени:
var filter = s.filter(Snap.filter.shadow(5, 5, 5, "#000"));
rect.attr({filter: filter});
Можно комбинировать несколько фильтров для достижения сложных визуальных эффектов.
Snap.svg поддерживает стандартные события DOM:
circle.click(function() {
this.attr({fill: "#2ecc71"});
});
rect.hover(
function() { this.attr({stroke: "#c0392b"}); },
function() { this.attr({stroke: "#2c3e50"}); }
);
Поддерживаются события click, mouseover,
mouseout, mousedown, mouseup и
другие. Это позволяет создавать интерактивные графические
интерфейсы.
Snap.svg предоставляет метод Snap.load() для загрузки
внешних SVG:
Snap.load("image.svg", function(fragment) {
s.append(fragment);
});
После загрузки элементы SVG становятся доступными для манипуляций через методы Snap, включая трансформации, атрибуты и события.
Используя комбинацию элементов, групп и путей, можно создавать сложные динамические диаграммы, анимации и интерактивные визуализации. Snap.svg обеспечивает:
Это делает библиотеку идеальным инструментом для интерактивной графики, визуализации данных и создания динамических интерфейсов на основе векторной графики.