Неверное связывание с HTML-элементом При создании SVG-контейнера важно правильно указать целевой элемент. Например, следующая конструкция вызовет ошибку:
const draw = SVG().addTo('#nonexistent'); // элемента с таким ID нет
Решение: убедиться, что элемент существует в DOM к моменту вызова:
const container = document.getElementById('svg-container');
const draw = SVG().addTo(container);
Пропущенный вызов SVG() Иногда пытаются
сразу работать с элементами SVG без создания корневого объекта:
const circle = draw.circle(100); // draw не определён
Нужно сначала создать или получить контейнер:
const draw = SVG().addTo('#svg-container');
const circle = draw.circle(100);
Неправильные единицы измерения SVG.js поддерживает пиксели, проценты и относительные единицы, но часто встречается использование строк без единиц или смешение типов:
draw.rect('100', '100'); // переданы строки без единиц
Правильно указывать числовые значения или строки с единицами:
draw.rect(100, 100); // пиксели
draw.rect('50%', '50%'); // относительные размеры
Элементы выходят за границы контейнера Это
происходит при неправильной установке viewBox или координат
элементов. Например:
draw.rect(500, 500).move(600, 600); // выходит за границу
Использование viewBox позволяет контролировать видимую
область:
draw.viewbox(0, 0, 800, 800);
draw.rect(500, 500).move(600, 600); // теперь корректно масштабируется
Неверное использование метода animate()
Прямое использование анимации на неинициализированном элементе вызовет
ошибки:
const circle = SVG().circle(50);
circle.animate(1000).attr({ cx: 200 }); // без добавления в контейнер
Решение — добавить элемент в контейнер перед анимацией:
const draw = SVG().addTo('#svg-container');
const circle = draw.circle(50).move(0, 0);
circle.animate(1000).attr({ cx: 200 });
Трансформации применяются в неправильном порядке
SVG.js применяет трансформации в порядке вызова. Часто проблемы
возникают при сочетании rotate, scale и
translate:
rect.scale(2).translate(50, 50).rotate(45);
Рекомендуется использовать единый объект трансформации или метод
transform():
rect.transform({ scale: 2, translateX: 50, translateY: 50, rotate: 45 });
Неправильная привязка событий к элементам SVG Методы
.on() требуют корректного указания функции и контекста:
rect.on('click', rectClicked()); // функция вызывается сразу
Правильно передавать ссылку на функцию:
rect.on('click', rectClicked); // функция вызывается при событии
Использование стрелочной функции и this
Стрелочные функции не имеют собственного this, что часто
ломает доступ к элементу:
rect.on('click', () => {
console.log(this); // undefined
});
Использовать обычную функцию:
rect.on('click', function() {
console.log(this); // rect
});
Добавление элементов вне группы Если необходимо
управлять несколькими элементами одновременно, их стоит помещать в
group():
const g = draw.group();
g.rect(100, 100);
g.circle(50);
// без группы будет сложнее анимировать или трансформировать все элементы одновременно
Ошибки при перемещении группы Метод
move() у группы перемещает координаты относительно текущих,
а не абсолютных. Часто элементы смещаются не туда, куда ожидалось.
Решение — проверять координаты и использовать
transform() для точного позиционирования.
Неправильные форматы цвета SVG.js поддерживает hex, rgb, rgba, hsl и ключевые слова CSS. Ошибки часто связаны с опечатками:
rect.fill('redd'); // ошибка
Правильно:
rect.fill('red');
rect.fill('#ff0000');
rect.fill('rgb(255,0,0)');
Неправильное комбинирование атрибутов стиля
Например, использование одновременно fill() и
attr('fill', ...) может приводить к путанице.
Лучше использовать один метод для задания цвета:
rect.fill('blue'); // вместо attr
Применение стилей к тексту до добавления в контейнер Элемент текста не рендерится, пока не добавлен в контейнер. Применение стиля до добавления не всегда работает:
const t = SVG().text('Привет').font({ size: 24 }); // draw не указан
Правильно:
const draw = SVG().addTo('#svg-container');
const t = draw.text('Привет').font({ size: 24 });
Игнорирование выравнивания Методы
text-anchor, dominant-baseline необходимо
использовать правильно для центрирования текста:
text.attr({ 'text-anchor': 'middle', 'dominant-baseline': 'middle' });
Попытка работать с SVG() без подключения
библиотеки Простое подключение скрипта без проверки вызовет
SVG is not defined.
Экспорт SVG с отсутствием корневого контейнера При
попытке draw.svg() без элементов результат может быть
пустым. Всегда создавать контейнер и добавлять элементы до экспорта.
Эта систематизация типичных ошибок позволяет эффективно их идентифицировать и устранять, обеспечивая корректное использование возможностей SVG.js и надежную работу интерактивных SVG-приложений.