Масштабирование (scale) в SVG.js позволяет изменять
размеры элементов без изменения их исходной геометрии. При применении
масштабирования объект сохраняет пропорции, если не указано иное, и
координаты его точек автоматически подстраиваются под новый размер.
const draw = SVG().addTo('body').size(600, 400);
const rect = draw.rect(100, 50).fill('#f06');
rect.scale(2); // увеличивает размеры в 2 раза
В приведённом примере прямоугольник увеличивается пропорционально по горизонтали и вертикали. Если требуется масштабировать не пропорционально, можно указать отдельные коэффициенты для осей X и Y:
rect.scale(2, 0.5); // X увеличивается в 2 раза, Y уменьшается в 2 раза
SVG.js позволяет использовать как абсолютные, так и относительные значения масштабирования.
rect.scale(1.5, 1.5, true); // true указывает на относительное масштабирование
Если третий параметр не указан, масштабирование по умолчанию считается абсолютным.
По умолчанию масштабирование выполняется относительно верхнего левого угла элемента. Для более точного управления можно задавать точку, относительно которой выполняется трансформация:
rect.scale(1.5, 1.5, true, 50, 25); // масштабирование относительно точки (50, 25)
Первые два параметра — коэффициенты по X и Y, третий — относительное масштабирование, четвёртый и пятый — координаты центра трансформации.
SVG.js позволяет объединять масштабирование с другими
трансформациями: вращением, перемещением и наклоном. Для этого
используется метод transform:
rect.transform({
scaleX: 2,
scaleY: 1.5,
rotate: 45,
cx: 50,
cy: 25
});
Метод transform применяет все трансформации сразу,
обеспечивая точное позиционирование и изменение размеров. Параметры
cx и cy задают центр масштабирования и
вращения одновременно.
Для текста и групп элементов (<g>) масштабирование
работает аналогично, но с особенностями:
const group = draw.group();
group.add(draw.circle(50).fill('#0f0'));
group.add(draw.rect(100, 50).fill('#00f'));
group.scale(1.5); // увеличивает все элементы группы
При работе с группами важно учитывать, что внутренние координаты элементов сохраняются относительно группы, поэтому масштабирование влияет на все дочерние элементы одновременно.
SVG.js поддерживает плавное изменение масштаба через метод
animate. Это позволяет создавать динамичные визуальные
эффекты:
rect.animate(1000, '<>').scale(2, 2); // за 1 секунду увеличивает элемент вдвое
Параметр '<>' задаёт кривую ускорения/замедления
(ease-in-out). Можно комбинировать с другими анимациями:
rect.animate(1500).scale(0.5).move(200, 100); // масштабирование и перемещение одновременно
scale(s) — пропорциональное масштабирование.scale(sx, sy) — масштабирование по отдельным осям.scale(sx, sy, relative) задаёт
относительность.(cx, cy).transform() объединяет масштабирование с другими
трансформациями.animate().scale() позволяет динамически
изменять размер объектов.Масштабирование в SVG.js — это инструмент, который, при правильном использовании, обеспечивает точное управление размерами и пропорциями элементов, позволяя создавать сложные динамичные графические интерфейсы и визуализации.