Snap.svg работает с элементами SVG, встроенными в HTML-документ. Для начала необходимо создать контейнер, который будет являться корнем всех графических элементов:
var s = Snap("#svgContainer");
Здесь #svgContainer — это идентификатор элемента
<svg> в HTML. Snap.svg автоматически привязывает все
создаваемые фигуры к указанному контейнеру, что позволяет управлять их
позиционированием внутри DOM.
Контейнер может быть создан динамически:
var s = Snap(800, 600);
document.body.appendChild(s.node);
В этом случае создается элемент
<svg width="800" height="600"></svg>, который
добавляется в документ. s.node возвращает реальный
DOM-элемент SVG.
Snap.svg использует координаты в пикселях для задания положения элементов. Основные методы позиционирования:
x,
y, cx, cy и другие для
позиционирования.translate), масштабирование
(scale), вращение (rotate).Пример позиционирования прямоугольника:
var rect = s.rect(0, 0, 100, 50);
rect.attr({
fill: "#3498db",
x: 50,
y: 100
});
Здесь прямоугольник смещается на 50 пикселей по горизонтали и 100 по вертикали внутри SVG-контейнера.
Метод transform позволяет работать с матрицами
преобразований, что удобно для сложного позиционирования и анимации:
rect.transform("t150,200"); // translate(150, 200)
Формат команд:
t dx,dy — перемещение.s sx,sy[,cx,cy] — масштабирование с опциональной точкой
центра.r angle[,cx,cy] — вращение вокруг точки.m a,b,c,d,e,f — матричное преобразование.Команды можно комбинировать:
rect.transform("t100,50 r45,50,25 s2,2");
Эта строка сначала сдвигает объект, затем вращает его и масштабирует.
Snap.svg позволяет объединять несколько элементов в группу для совместного позиционирования:
var group = s.group(rect, circle);
group.transform("t200,100");
Все элементы внутри группы перемещаются синхронно на 200 пикселей по X и 100 по Y. Группы удобны для создания сложных композиций и анимаций.
Контейнер SVG может управлять системой координат через атрибут
viewBox:
s.attr({
viewBox: "0 0 800 600",
preserveAspectRatio: "xMidYMid meet"
});
viewBox="minX minY width height" задает внутренние
координаты, относительно которых позиционируются элементы.preserveAspectRatio управляет масштабированием при
изменении размеров контейнера.Это позволяет перемещать и масштабировать весь SVG без изменения координат отдельных элементов.
Текстовые элементы позиционируются через x,
y:
var text = s.text(100, 200, "Пример текста");
text.attr({ fontSize: 24, fill: "#2c3e50" });
Для сложных фигур можно использовать path, задавая
координаты кривых и линий:
var path = s.path("M10,80 C40,10 65,10 95,80 S150,150 180,80");
path.attr({ stroke: "#e74c3c", fill: "none", strokeWidth: 2 });
Каждая точка на пути имеет абсолютные координаты, что позволяет точно управлять позицией.
Snap.svg поддерживает многоуровневую вложенность:
var innerGroup = s.group(circle1, circle2);
var outerGroup = s.group(innerGroup, rect);
outerGroup.transform("t50,50");
Вложенные группы наследуют позиционирование родителя. Перемещая
outerGroup, автоматически смещаются все вложенные
элементы.
Snap.svg сохраняет порядок элементов в DOM:
append — добавляет элемент в конец контейнера.prepend — добавляет элемент в начало.insertBefore и insertAfter — управляют
порядком относительно других элементов.Порядок влияет на отображение, особенно если элементы перекрываются:
circle.insertBefore(rect);
Теперь круг будет находиться под прямоугольником.
Snap.svg позволяет изменять координаты элементов в реальном времени:
rect.attr({ x: 300, y: 150 });
rect.transform("t50,50");
Для анимаций используют метод animate с атрибутами
x, y или transform:
rect.animate({ transform: "t400,300" }, 1000, mina.easeinout);
Элемент плавно перемещается на новые координаты за 1 секунду с указанной функцией плавности.
attr управляет базовыми координатами и размерами.transform позволяет гибко перемещать, масштабировать и
вращать объекты.viewBox и preserveAspectRatio управляют
системой координат SVG.animate.