В SVG.js viewBox играет ключевую роль в управлении
масштабированием и позиционированием графики внутри контейнера SVG. Он
определяет координатную систему содержимого, которое
будет отображаться в пределах элемента SVG, и позволяет гибко
адаптировать графику под различные размеры экрана без потери
пропорций.
Стандартный синтаксис viewBox выглядит так:
svg.viewbox(x, y, width, height)
x и y — координаты верхнего левого угла
виртуального окна (начало системы координат для содержимого).width и height — размеры виртуального окна
в единицах координат SVG.Например:
const draw = SVG().addTo('body').size(400, 400);
draw.viewbox(0, 0, 200, 200);
В этом случае все объекты внутри SVG будут масштабироваться так, чтобы область 200×200 единиц занимала доступное пространство 400×400 пикселей, сохраняя пропорции.
viewBox
на масштабированиеviewBox не просто задаёт координаты — он определяет,
как содержимое будет отображаться при изменении размеров
контейнера.
width и height SVG
контейнера содержимое растягивается пропорционально.viewBox, содержимое
сжимается.size(width, height),
чтобы комбинировать физический размер контейнера с виртуальной
координатной системой viewBox.draw.size(800, 400).viewbox(0, 0, 200, 200);
Здесь содержимое будет растянуто по горизонтали сильнее, чем по
вертикали, если не использовать параметр
preserveAspectRatio.
preserveAspectRatioМетод viewbox в SVG.js поддерживает управление аспектом
с помощью preserveAspectRatio. Он определяет, как
содержимое масштабируется относительно контейнера:
draw.viewbox(0, 0, 200, 200).attr({ preserveAspectRatio: 'xMidYMid meet' });
Основные значения:
meet — содержимое масштабируется так, чтобы полностью
уместиться в контейнер, сохраняя пропорции.slice — содержимое масштабируется так, чтобы заполнить
контейнер полностью, обрезая лишнее.none — игнорирует сохранение пропорций, растягивая
содержимое по осям X и Y независимо.xMinYMin, xMidYMid, xMaxYMax
— выравнивание содержимого по горизонтали и вертикали при
масштабировании.viewBoxКогда задаётся viewBox, все координаты элементов SVG
интерпретируются относительно виртуальной системы координат.
Например:
const rect = draw.rect(50, 50).move(25, 25);
Если установлен viewBox(0, 0, 200, 200) и контейнер
имеет размер 400×400 пикселей, прямоугольник визуально будет занимать
половину контейнера, потому что координаты масштабируются
пропорционально.
viewBoxSVG.js позволяет изменять viewBox в процессе работы, что
удобно для реализации анимации, масштабирования и панорамирования:
draw.viewbox({ x: 50, y: 50, width: 100, height: 100 });
Изменение этих параметров позволяет “приблизить” или “отдалить” определённую область графики, создавая эффект зума без изменения самих размеров элементов.
viewBox,
чтобы SVG был адаптивным.preserveAspectRatio: 'xMidYMid meet'
обеспечивает одинаковое масштабирование по обеим осям и предотвращает
искажения.viewBox необходимо учитывать
точку начала координат (x, y)
для корректного позиционирования элементов.let xOffset = 0;
let yOffset = 0;
setInterval(() => {
xOffset += 1;
yOffset += 0.5;
draw.viewbox(xOffset, yOffset, 200, 200);
}, 30);
Такое управление viewBox позволяет создавать
плавное движение камеры по SVG-сцене, не меняя размеры
объектов.
Использование viewBox в SVG.js — это фундаментальный
инструмент для масштабируемой и адаптивной графики,
который обеспечивает точный контроль координатной системы, пропорций и
масштабирования. Правильное понимание его параметров позволяет создавать
интерактивные и динамичные SVG-приложения.