SVG.js использует стандартную систему координат SVG, где начало координат (0, 0) находится в верхнем левом углу контейнера SVG. Ось X направлена вправо, ось Y — вниз. Каждая графическая фигура в SVG позиционируется относительно этих координат. Понимание системы координат критично для точного размещения элементов и управления трансформациями.
В SVG.js позиционирование элементов осуществляется с помощью методов
move(x, y) и x() / y(). Например:
const draw = SVG().addTo('body').size(500, 500);
const rect = draw.rect(100, 50).move(50, 75);
В этом примере прямоугольник шириной 100 и высотой 50 будет расположен в точке (50, 75) относительно верхнего левого угла SVG-контейнера.
Ключевой момент: координаты элементов указываются от их верхнего левого угла, за исключением некоторых фигур (например, кругов, эллипсов), где координаты задают центр фигуры.
SVG.js поддерживает несколько типов единиц измерения:
Пример использования относительных единиц:
const circle = draw.circle('50%').move('25%', '25%');
Здесь радиус круга равен половине ширины контейнера SVG, а позиция — четверть ширины и высоты.
Важно: при смешении абсолютных и относительных единиц расчёт координат может вести к неожиданным результатам, особенно при динамическом изменении размеров контейнера.
SVG.js предоставляет методы для трансформации элементов:
translate(x, y), rotate(angle, cx, cy),
scale(sx, sy). Эти трансформации выполняются
относительно текущей системы координат элемента.
Например:
rect.rotate(45, rect.cx(), rect.cy());
Метод cx() и cy() возвращают координаты
центра элемента, что позволяет вращать фигуру вокруг своего центра.
Совет: всегда проверять порядок применения трансформаций, так как они выполняются последовательно и могут влиять друг на друга.
SVG.js позволяет работать с координатами двумя способами:
move(x, y), cx(), cy().dmove(dx, dy) и draggable().Пример смещения элемента:
rect.dmove(10, 20); // перемещает прямоугольник на 10px вправо и 20px вниз
Ключевое отличие: move() задает новую
абсолютную позицию, а dmove() — перемещает элемент на
заданное расстояние от текущей позиции.
Для многоугольников, линий и путей координаты задаются массивами точек или строками команд:
const poly = draw.polygon('50,0 100,50 50,100 0,50').fill('none').stroke({width: 2});
Каждая пара чисел определяет точку в системе координат SVG. Методы
plot() позволяют динамически изменять координаты после
создания фигуры:
poly.plot('0,0 50,0 25,50');
Особенность: все точки интерпретируются относительно системы координат контейнера, а не относительно самой фигуры, если не используется трансформация.
SVG.js поддерживает методы выравнивания относительно контейнера:
center(x, y) и cx() / cy(). Это позволяет
быстро позиционировать элементы:
rect.center(250, 250); // центрирует прямоугольник по середине контейнера
Для групп (group) координаты всех вложенных элементов
интерпретируются относительно координат группы, что
упрощает создание комплексных композиций и управление
трансформациями.
Система координат SVG тесно связана с атрибутом viewBox,
который задаёт виртуальное пространство для всех элементов:
const draw = SVG().addTo('body').size(400, 400).viewbox(0, 0, 200, 200);
Здесь всё содержимое SVG масштабируется в диапазон от 0 до 200 по X и
Y, независимо от размеров контейнера. Это особенно важно для адаптивной
графики и работы с единицами %.
Важное замечание: при масштабировании через
viewBox все координаты и размеры элементов пересчитываются
относительно новой системы координат, но трансформации
(rotate, scale) работают с локальными
координатами элементов.
move и dmove для абсолютного
и относительного позиционирования.plot().translate,
rotate, scale последовательно.viewBox для масштабирования и адаптивного
дизайна.center,
cx, cy.Понимание этих принципов обеспечивает точное управление графикой и позволяет создавать динамические и адаптивные SVG-композиции с помощью SVG.js.