Snap.svg предоставляет мощный и интуитивно понятный интерфейс для
работы с элементами SVG, включая круги и эллипсы. Основными методами для
создания этих фигур являются circle() и
ellipse() объекта Snap.
Создание круга осуществляется с помощью метода:
var s = Snap(800, 600);
var circle = s.circle(cx, cy, r);
После создания фигура становится объектом Snap, которому можно применять атрибуты и анимации.
Атрибуты задаются методом attr():
circle.attr({
fill: "#ff0000", // заливка
stroke: "#000000", // цвет контура
strokeWidth: 4 // толщина контура
});
Ключевые атрибуты:
fill — цвет заливки или none для
прозрачного фонаstroke — цвет линииstrokeWidth — толщина линииopacity — прозрачность фигурыДля создания эллипса используется метод ellipse():
var ellipse = s.ellipse(cx, cy, rx, ry);
Атрибуты задаются аналогично кругу:
ellipse.attr({
fill: "#00ff00",
stroke: "#0000ff",
strokeWidth: 3
});
Управление положением и размером фигур можно осуществлять через
методы transform() и изменения атрибутов:
circle.attr({ cx: 200, cy: 150, r: 80 });
ellipse.attr({ cx: 400, cy: 300, rx: 100, ry: 50 });
Для динамического изменения размеров полезно использовать методы Snap.svg для анимаций:
circle.animate({ r: 120 }, 1000, mina.elastic);
ellipse.animate({ rx: 150, ry: 75 }, 1000, mina.bounce);
Заливка фигур может быть не только однотонной. Snap.svg поддерживает градиенты:
circle.attr({
fill: s.gradient("r(#ff0000-#0000ff)")
});
"r(...)" — радиальный градиент"l(...)" — линейный градиентГрадиенты принимают несколько цветовых остановок через дефис. Для
сложных узоров можно использовать <pattern> внутри
Snap.
Фигуры Snap.svg поддерживают обработку событий:
circle.click(function() {
this.attr({ fill: "#ffff00" });
});
ellipse.hover(
function() { this.attr({ strokeWidth: 6 }); },
function() { this.attr({ strokeWidth: 3 }); }
);
click — клик мышиhover — наведение и уход курсораКруги и эллипсы можно объединять в группы с помощью
group():
var g = s.group(circle, ellipse);
g.attr({ opacity: 0.8 });
Группа наследует атрибуты и трансформации, позволяя изменять все фигуры одновременно.
Snap.svg позволяет анимировать положение, размеры и трансформации:
circle.animate({ cx: 500, cy: 400 }, 1500, mina.easeinout);
ellipse.animate({ transform: "r45,400,300" }, 1500, mina.linear);
transform — вращение, масштабирование, смещениеr45,400,300 — вращение на 45° вокруг точки
(400,300)Анимации могут быть цепочными и комбинированными для создания сложных эффектов.
Эллипсы и круги часто используются как маски:
var maskCircle = s.circle(400, 300, 100);
var mask = s.mask(maskCircle);
ellipse.attr({ mask: mask });
Это позволяет создавать эффекты скрытия или отображения частей других фигур.
circle() и ellipse() для
базовой фигурыattr() для внешнего видаanimate() для динамических измененийclick, hover
для интерактивностиТакой подход позволяет создавать визуально сложные и интерактивные SVG-композиции, полностью используя возможности Snap.svg.