В SVG.js каждый графический объект создаётся через методы контейнера
SVG() или уже существующего элемента. Позиционирование
объектов основывается на свойствах x,
y, cx, cy для
координат, а также на трансформациях, которые предоставляют более гибкий
контроль над размещением элементов на холсте.
const draw = SVG().addTo('body').size(600, 400);
const rect = draw.rect(100, 50).fill('#f06').move(50, 50);
В данном примере move(x, y) задаёт верхний левый
угол прямоугольника в координатах (50, 50).
move(x, y) для прямоугольников, эллипсов и текста,
center(x, y) для центровки, а также plot() для
сложных форм.dx(), dy() для смещения текущих координат, или
через метод dmove(dx, dy) для кривых и
многоугольников.rect.dx(20).dy(10); // смещает прямоугольник на 20 по X и 10 по Y
rect.dmove(15, 25); // смещает относительно текущего положения
Использование относительных смещений удобно для анимаций и динамического расположения элементов в зависимости от размеров контейнера.
Метод center(x, y) позволяет разместить элемент по
центру указанных координат. Для сложных объектов, таких как группы
(g), координаты центра рассчитываются относительно
bounding box.
const circle = draw.circle(80).fill('#0f9').center(300, 200);
Важно: метод center() изменяет
координаты cx и cy для круга и эллипса, или
сдвигает верхний левый угол для прямоугольника и текста так, чтобы
элемент оказался по центру указанных координат.
Группы (group) позволяют работать с несколькими
элементами как с единым объектом. Позиционирование группы перемещает все
вложенные элементы одновременно.
const group = draw.group();
group.add(rect);
group.add(circle);
group.move(100, 50);
move(x, y) смещает всю группу относительно исходного
положения.center(x, y) центрует группу по указанным
координатам.move() или dx()/dy().SVG.js поддерживает выравнивание элементов по горизонтали и вертикали с использованием комбинаций координат и размеров:
left(),
right(), cx()top(),
bottom(), cy()Пример выравнивания прямоугольников по центру:
const rect1 = draw.rect(50, 50).fill('#ff0').move(0, 0);
const rect2 = draw.rect(50, 50).fill('#0ff').move(100, 0);
// Центрирование второго прямоугольника относительно первого
rect2.cx(rect1.cx());
rect2.cy(rect1.cy());
Методы attr() и viewbox() позволяют
учитывать размеры холста при позиционировании:
draw.viewbox(0, 0, 600, 400);
const rect = draw.rect(100, 50).fill('#f09').move(draw.width() - 100, draw.height() - 50);
draw.width() и draw.height() возвращают
текущие размеры SVG-контейнера.Методы translate(), rotate(),
scale() позволяют управлять положением элементов через
матрицу трансформаций:
rect.translate(50, 30).rotate(45, rect.cx(), rect.cy());
translate(x, y) перемещает элемент относительно текущей
позиции.rotate(angle, cx, cy) вращает элемент вокруг точки (cx,
cy).scale(sx, sy) масштабирует элемент по осям X и Y, центр
масштабирования задаётся через cx() и
cy().Трансформации можно комбинировать, создавая сложные схемы позиционирования, включая анимации движения и вращения.
Для текста метод leading(), font-size(),
text-anchor() и dominant-baseline обеспечивают
точное вертикальное и горизонтальное выравнивание внутри SVG-контейнера
или группы:
const text = draw.text('Привет SVG').font({ size: 24, anchor: 'middle', leading: '1.2em' }).center(300, 200);
anchor: 'middle' выравнивает текст по горизонтали.dominant-baseline: 'middle' помогает выровнять текст
вертикально относительно центра.rect(),
circle(), text() и др.move() или
center().dx(),
dy(), dmove().group() для
совместного позиционирования.cx(), cy(), left(),
right(), top(), bottom().anchor и dominant-baseline.Эти методы позволяют создавать как простые схемы, так и сложные интерфейсы с точным контролем над расположением всех графических элементов.