В SVG.js любой элемент создаётся через объект
SVG(), который возвращает корневой SVG-контейнер, или через
методы создания фигур на этом контейнере, такие как rect(),
circle(), line(), path().
Пример создания контейнера и прямоугольника:
const draw = SVG().addTo('body').size(600, 400);
const rect = draw.rect(200, 100).fill('#f06').move(50, 50);
Каждый созданный элемент сохраняется как объект библиотеки, что позволяет инспектировать его свойства и методы.
Выбор элементов возможен как через переменные, так и с помощью селекторов:
const sameRect = draw.findOne('rect'); // выбирает первый <rect>
const allRects = draw.find('rect'); // выбирает все <rect>
Метод findOne() возвращает объект элемента, метод
find() — коллекцию элементов типа
SVG.Collection.
Все атрибуты SVG-элементов доступны через методы attr()
и style().
Примеры:
const width = rect.attr('width'); // возвращает 200
const fillColor = rect.style('fill'); // возвращает '#f06'
Для установки атрибутов можно передавать объект:
rect.attr({ x: 100, y: 150, width: 300 });
rect.style({ stroke: '#000', 'stroke-width': 2 });
Методы attr() и style() позволяют работать
как с отдельными свойствами, так и с набором атрибутов одновременно.
SVG.js предоставляет удобные методы для получения геометрических параметров:
bbox() — возвращает bounding box,
объект с координатами и размерами:
{ x, y, width, height }.rbox() — возвращает координаты относительно
родительского элемента или документа.cx(), cy(), width(),
height() — прямой доступ к координатам центра и
размерам.Пример:
const box = rect.bbox();
console.log(box.x, box.y, box.width, box.height);
bbox() полезен для вычислений, позиционирования и
выравнивания элементов в SVG.
Каждый элемент SVG может иметь id и CSS-классы.
Библиотека позволяет легко их читать и изменять:
rect.id('myRect');
rect.addClass('highlighted');
rect.hasClass('highlighted'); // true
rect.removeClass('highlighted');
id() и методы классов возвращают строки или изменяют их,
что удобно при динамическом управлении SVG.
Для текстовых элементов (text) можно получать и изменять
содержимое:
const text = draw.text('Привет').move(100, 200);
console.log(text.text()); // "Привет"
text.text('Новый текст');
Методы text() и plain() различаются:
text() может работать с HTML-подобной разметкой внутри SVG,
а plain() возвращает или задаёт только простой текст без
вложенных элементов.
Элементы SVG могут быть повернуты, масштабированы или перемещены. Для этого используются методы:
transform() — получение или установка
трансформаций.translate(x, y) — смещение.rotate(angle, cx, cy) — поворот вокруг точки.scale(sx, sy) — масштабирование.Пример:
rect.translate(50, 50).rotate(45);
const t = rect.transform();
console.log(t); // { rotation: 45, scaleX: 1, scaleY: 1, x: 50, y: 50 }
Трансформации сохраняются как объект, что позволяет инспектировать текущее состояние элемента и применять вычисления для анимации или позиционирования.
Методы find() и children() возвращают
коллекции, позволяющие работать с множеством элементов
одновременно:
const circles = draw.find('circle');
circles.each(function(i, children) {
console.log(this.attr('cx'), this.attr('cy'));
});
Коллекция поддерживает методы filter(),
map(), forEach() для удобной фильтрации,
модификации и итерации по SVG-элементам.
SVG.js поддерживает стандартные DOM-события:
rect.on('click', function(event) {
console.log('Нажат прямоугольник', this.bbox());
});
Методы .on() и .off() позволяют отслеживать
действия пользователя, а также инспектировать атрибуты элемента в момент
события.
SVG.js предоставляет утилиты для продвинутого инспектирования:
inside(x, y) — проверяет, находится ли точка внутри
элемента.intersects(element) — проверяет пересечение с другим
элементом.point(x, y) — создаёт объект точки для вычислений
координат.Пример использования:
if(rect.inside(120, 80)) {
console.log('Точка внутри прямоугольника');
}
Эти методы полезны для создания интерактивных визуализаций и анализа геометрии SVG.
Использование этих инструментов позволяет полностью управлять и инспектировать SVG-элементы на любом уровне, от простых атрибутов до сложных трансформаций и взаимодействий.