Библиотека SVG.js предоставляет удобные методы для
работы с внешними SVG-файлами, позволяя динамически загружать и
манипулировать ими в DOM. Основной инструмент для этого — метод
SVG().load(url, callback).
SVG().load('icon.svg', function(loader) {
this.addTo('#drawing'); // добавление загруженного SVG в контейнер
this.size(200, 200); // изменение размера
});
url — путь к внешнему SVG-файлу.callback — функция, вызываемая после
успешной загрузки, где this ссылается на загруженный
SVG-элемент.addTo(selector) позволяет вставить SVG в конкретный
контейнер DOM.size(width, height)) и
позиционирования (move(x, y)) работают на загруженных
элементах так же, как и на созданных программно.Для асинхронной загрузки можно использовать промисы:
SVG().load('icon.svg').then(svg => {
svg.addTo('#drawing').center(150, 150);
});
<object> и <img>SVG-файлы можно подключать через HTML-теги
<object> или <img>, а затем
использовать SVG.js для управления содержимым через
метод SVG.adopt(element):
const obj = document.querySelector('object#mySVG');
obj.addEventListener('load', () => {
const svgDoc = obj.contentDocument.querySelector('svg');
const svg = SVG.adopt(svgDoc);
svg.fill('#f06').stroke({ width: 2 });
});
SVG.adopt(element) превращает существующий DOM-элемент
<svg> в объект SVG.js, позволяя
применять к нему стандартные методы библиотеки.Загрузка всего файла не всегда нужна. Можно извлекать отдельные элементы с помощью селекторов и манипулировать ими:
SVG().load('icons.svg').then(svg => {
const icon = svg.findOne('#icon-star'); // выбор элемента по id
icon.fill('gold').scale(1.5);
});
findOne(selector) — возвращает первый
элемент, соответствующий CSS-подобному селектору.find(selector) — возвращает массив
элементов, соответствующих селектору, поддерживает групповые
операции.Это особенно удобно для иконок и спрайтов, когда требуется работать только с частью SVG.
SVG-спрайты позволяют хранить множество иконок в одном файле.
SVG.js поддерживает импорт отдельных символов через
<use>:
const draw = SVG().addTo('#drawing').size(400, 400);
draw.use('icons.svg#icon-heart').move(50, 50).scale(2);
draw.use('icons.svg#icon-star').move(150, 50).scale(1.5);
use(url#id) — создаёт экземпляр символа с заданного id
внутри внешнего файла.Работа с внешними файлами всегда подразумевает возможность ошибки
загрузки. SVG.js предоставляет события
error и промисы для безопасного управления:
SVG().load('icon.svg')
.then(svg => svg.addTo('#drawing'))
.catch(err => console.error('Ошибка загрузки SVG:', err));
<object> и <img>
рекомендуется проверять событие onerror:const img = document.querySelector('#iconImg');
img.oner ror = () => console.error('Не удалось загрузить SVG');
SVG-файлы можно загружать вручную через fetch, а затем вставлять в DOM и обрабатывать через SVG.js:
fetch('icon.svg')
.then(res => res.text())
.then(text => {
const container = document.querySelector('#drawing');
container.innerHTML = text;
const svg = SVG.adopt(container.querySelector('svg'));
svg.fill('red').stroke({ width: 3 });
});
Для динамически изменяемых интерфейсов важно уметь перезагружать SVG:
function reloadSVG(selector, url) {
const container = document.querySelector(selector);
container.innerHTML = ''; // очистка предыдущего SVG
SVG().load(url).then(svg => svg.addTo(container));
}
При загрузке внешних SVG важно учитывать политику CORS:
Access-Control-Allow-Origin.SVG.adopt и прямой доступ к
внутреннему содержимому через <object> будут
недоступны из-за ограничений браузера.Для обхода ограничений можно использовать серверный прокси или инлайновое внедрение SVG через fetch.
Эти возможности делают SVG.js мощным инструментом для динамического взаимодействия с внешними SVG-файлами, позволяя создавать интерактивную графику, иконки и визуализации с полным контролем над элементами.