Snap.svg использует декартову систему координат, где точка (0, 0) находится в левом верхнем углу холста. Ось X направлена вправо, а ось Y — вниз. Все элементы, создаваемые с помощью Snap.svg, позиционируются относительно этой системы координат.
Ключевые моменты:
x,
y, cx, cy (для кругов),
x1, y1, x2, y2 (для
линий) и другие, специфичные для типа элемента.Пример создания круга в Snap.svg:
var s = Snap(800, 600);
var circle = s.circle(100, 100, 50); // cx=100, cy=100, r=50
circle.attr({
fill: "#3498db",
stroke: "#2980b9",
strokeWidth: 5
});
В этом примере центр круга находится в точке (100, 100) относительно верхнего левого угла холста.
Viewport — это область видимости, которая ограничивает, какая часть SVG видна на экране. В Snap.svg viewport определяется размерами контейнера, в котором создается объект Snap.
var s = Snap("#svgContainer"); // где <svg id="svgContainer"></svg> в HTML
Ключевые свойства viewport:
overflow: hidden.viewBoxviewBox позволяет определить систему координат
внутри viewport, делая возможным масштабирование и адаптацию к
разным размерам холста. Формат:
"minX minY width height".
Пример:
s.attr({
viewBox: "0 0 400 300"
});
Здесь:
minX и minY — координаты верхнего левого
угла видимой области внутри SVG.width и height — размеры координатной
системы. Все элементы теперь позиционируются относительно этой системы,
а не абсолютных пикселей viewport.Особенности использования viewBox:
Snap.svg предоставляет мощные возможности для работы с координатами
через трансформации: translate,
scale, rotate, matrix.
Трансформации можно применять к отдельным элементам или группам
(<g>).
Пример трансформации:
var rect = s.rect(50, 50, 100, 100);
rect.transform("translate(200, 150) rotate(45, 100, 100)");
Здесь:
translate(200, 150) — перемещает элемент на 200
пикселей вправо и 150 вниз.rotate(45, 100, 100) — поворачивает элемент на 45°
относительно точки (100, 100).Ключевые моменты трансформаций:
Snap.svg позволяет объединять элементы в группы через метод
group. Группа наследует систему координат, позволяя
управлять несколькими элементами одновременно.
Пример:
var circle1 = s.circle(0, 0, 50);
var circle2 = s.circle(100, 0, 50);
var grp = s.group(circle1, circle2);
grp.transform("translate(200, 200)");
Все элементы группы смещаются вместе, сохраняя относительные координаты внутри группы.
Особенности работы с группами:
viewBox позволяет создавать графику, которая масштабируется
под любой экран.Система координат и управление viewport являются фундаментальными инструментами Snap.svg, обеспечивая точное позиционирование, масштабирование и анимацию графических объектов, а также создавая гибкую основу для построения интерактивных SVG-сцен.