Область видимости в контексте SVG.js определяет, где и каким образом
создаются, изменяются и доступны SVG-элементы. Центральным элементом
выступает объект SVG, создающий корневой контейнер, внутри
которого формируется вся иерархия графики.
Каждый вызов SVG() возвращает экземпляр, который служит
контекстом рисования. Все созданные элементы принадлежат именно
этому контексту:
const draw = SVG().addTo('#app').size(400, 400)
const rect = draw.rect(100, 100)
В данном случае rect существует внутри области видимости
draw. Это означает:
SVG.js строит структуру элементов по принципу вложенности, аналогично
DOM. Каждый контейнер (group, nested,
symbol) формирует собственную локальную область:
const group = draw.group()
const circle = group.circle(50)
Здесь:
group — контейнерcircle — дочерний элементОбласть видимости circle включает:
SVG поддерживает механизм наследования, и SVG.js активно его использует. Атрибуты, заданные родителю, могут автоматически применяться к дочерним элементам.
group.fill('red')
group.rect(50, 50)
group.circle(30)
Оба элемента (rect и circle) будут иметь
красную заливку, если явно не задано иное.
Ключевые особенности:
fill, stroke, font-family)Любой дочерний элемент может переопределить унаследованные свойства:
group.fill('red')
const rect = group.rect(50, 50)
const circle = group.circle(30).fill('blue')
Результат:
rect → красныйcircle → синийSVG.js применяет принцип каскадности, аналогичный CSS.
group()Создает логическую группу элементов:
const group = draw.group().translate(50, 50)
group.rect(100, 100)
Все дочерние элементы будут смещены на (50, 50).
nested()Создает вложенный SVG-документ:
const nested = draw.nested().size(200, 200)
nested.circle(50)
Особенности:
symbol() и use()Позволяют создавать переиспользуемые элементы:
const symbol = draw.symbol()
symbol.rect(50, 50)
draw.use(symbol).move(10, 10)
draw.use(symbol).move(100, 100)
Здесь:
symbol — шаблонuse() — создает экземплярыВажно:
symbol отражаются во всех экземплярахSVG.js не использует глобальные переменные для хранения элементов. Управление осуществляется через ссылки:
const rect = draw.rect(100, 100)
Если ссылка потеряна:
SVG.js предоставляет методы для работы с деревом:
rect.parent()
group.children()
draw.find('rect')
Метод find() возвращает коллекцию элементов,
соответствующих селектору.
Трансформации (перемещение, масштабирование, поворот) наследуются через матрицы преобразований.
group.translate(100, 0)
group.rect(50, 50)
Прямоугольник будет визуально смещен, хотя его собственные координаты не изменились.
Особенности:
defs()Контейнер defs используется для хранения
определений:
const defs = draw.defs()
const gradient = defs.gradient('linear', add => {
add.stop(0, '#f00')
add.stop(1, '#00f')
})
Элементы внутри defs:
Обработчики событий привязываются к конкретным элементам:
rect.on('click', function() {
this.fill('green')
})
Контекст this:
SVG.js интегрируется с DOM:
rect {
fill: red;
}
Если SVG-элемент не имеет явного fill, применяется
CSS.
SVG.js позволяет хранить данные внутри элементов:
rect.data('id', 123)
Это создает локальную область хранения:
Метод clone() создает копию элемента:
const rect2 = rect.clone()
Особенности:
Удаление элемента:
rect.remove()
Очистка контейнера:
group.clear()
После удаления:
Анимации применяются локально:
rect.animate().move(100, 100)
Если анимация применяется к группе:
group.animate().scale(2)
group для логической сегментацииnestedОбласть видимости и наследование в SVG.js формируют основу управления графикой, определяя поведение элементов, их взаимосвязь и предсказуемость визуального результата.