Генераторы SVG

Snap.svg — это мощная библиотека для работы с векторной графикой в формате SVG в браузере. Основное преимущество библиотеки заключается в удобных методах создания, модификации и анимации SVG-элементов через JavaScript. Генераторы SVG в Snap.svg позволяют динамически создавать графические элементы и управлять ими программно, что делает библиотеку идеальной для интерактивной визуализации.

Создание элемента SVG

Для начала необходимо создать экземпляр Snap, который будет представлять контейнер SVG:

var s = Snap("#svgContainer");

Здесь #svgContainer — идентификатор элемента <svg> в HTML. Snap.svg также позволяет создавать SVG с нуля:

var s = Snap(800, 600); // Создание SVG 800x600 пикселей
document.body.appendChild(s.node);

Использование генераторов SVG начинается с вызова методов circle, rect, ellipse, line, polyline, polygon и path.

Генераторы базовых фигур

Круг

var circle = s.circle(150, 150, 100); // x, y, радиус
circle.attr({
    fill: "#3498db",
    stroke: "#2980b9",
    strokeWidth: 5
});

Прямоугольник

var rect = s.rect(50, 50, 200, 100); // x, y, ширина, высота
rect.attr({
    fill: "#e74c3c",
    stroke: "#c0392b",
    strokeWidth: 4,
    rx: 15, // Скругление по горизонтали
    ry: 15  // Скругление по вертикали
});

Эллипс

var ellipse = s.ellipse(300, 300, 150, 100); // cx, cy, rx, ry
ellipse.attr({
    fill: "#2ecc71",
    stroke: "#27ae60",
    strokeWidth: 3
});

Линия

var line = s.line(50, 50, 400, 400);
line.attr({
    stroke: "#f1c40f",
    strokeWidth: 6
});

Многоугольники и полигоны

var polyline = s.polyline([100,100, 200,50, 300,100, 400,50]);
polyline.attr({
    fill: "none",
    stroke: "#8e44ad",
    strokeWidth: 2
});

var polygon = s.polygon([50,150, 150,250, 250,150, 350,250]);
polygon.attr({
    fill: "#9b59b6",
    stroke: "#8e44ad",
    strokeWidth: 3
});

Генерация сложных форм с path

Метод path позволяет создавать произвольные кривые и формы с помощью SVG-путей:

var path = s.path("M100,100 C200,50 300,150 400,100"); 
path.attr({
    fill: "none",
    stroke: "#e67e22",
    strokeWidth: 5
});

Ключевые команды пути:

  • M x,y — переместиться в точку (x, y)
  • L x,y — линия до точки (x, y)
  • H x / V y — горизонтальная / вертикальная линия
  • C x1,y1 x2,y2 x,y — кубическая кривaя Безье
  • Q x1,y1 x,y — квадратичная кривая Безье
  • Z — замкнуть путь

Использование генераторов для динамических элементов

Snap.svg позволяет создавать элементы на основе данных:

var data = [50, 100, 150, 200, 250];
data.forEach(function(value, index){
    var circle = s.circle(100 + index*70, 300, value/10);
    circle.attr({
        fill: "#1abc9c",
        stroke: "#16a085",
        strokeWidth: 2
    });
});

Такой подход позволяет строить диаграммы, графики и интерактивные визуализации, где размеры, позиции и цвета элементов зависят от внешних данных.

Использование генераторов с группировкой элементов

Для упрощения работы с несколькими элементами можно использовать группы:

var g = s.group();
var c1 = s.circle(50,50,30);
var c2 = s.circle(150,50,30);
g.add(c1, c2);
g.attr({transform: "translate(100,100)"}); // перемещение всей группы

Группы упрощают анимацию и изменение свойств сразу для нескольких объектов.

Генераторы и анимация

Генераторы удобно комбинировать с анимацией:

var circle = s.circle(200, 200, 50);
circle.attr({fill: "#e74c3c"});
circle.animate({r: 100, fill: "#f39c12"}, 1000, mina.bounce);

Snap.svg поддерживает линейные и нелинейные функции интерполяции (mina.linear, mina.easein, mina.bounce) для плавной анимации.

Динамическая генерация с использованием функций

Для сложных визуализаций удобно создавать функции-генераторы:

function createStar(cx, cy, spikes, outerRadius, innerRadius) {
    var pathStr = "";
    var angle = Math.PI / spikes;
    for(var i = 0; i < 2 * spikes; i++){
        var r = (i % 2 === 0) ? outerRadius : innerRadius;
        var x = cx + Math.cos(i * angle) * r;
        var y = cy + Math.sin(i * angle) * r;
        pathStr += (i === 0 ? "M" : "L") + x + "," + y + " ";
    }
    pathStr += "Z";
    return s.path(pathStr).attr({
        fill: "#f1c40f",
        stroke: "#f39c12",
        strokeWidth: 2
    });
}

createStar(400, 300, 5, 80, 40);

Такой подход позволяет генерировать любые повторяющиеся или сложные формы программно, без ручного указания каждой точки.


Snap.svg сочетает простоту и мощь генераторов SVG, позволяя создавать динамические и интерактивные графические элементы. Использование методов circle, rect, ellipse, line, polygon и особенно path обеспечивает полный контроль над формами, позициями, стилями и анимациями SVG-элементов.