В библиотеке SVG.js поворот (rotate) используется для
вращения графических объектов вокруг определённой точки. Метод
.rotate() позволяет управлять углом поворота в градусах и
точкой центра вращения. Синтаксис метода:
element.rotate(angle, cx, cy)
Пример поворота прямоугольника на 45° вокруг его центра:
const draw = SVG().addTo('body').size(300, 300);
const rect = draw.rect(100, 50).fill('#f06');
rect.rotate(45);
Если требуется сместить точку вращения, указываются координаты:
rect.rotate(45, 150, 75);
Метод .rotate() является частью трансформаций, которые
могут комбинироваться с .translate(), .scale()
и .skew(). В SVG.js все трансформации применяются через
внутреннюю матрицу трансформации. При последовательном вызове методов
трансформации они суммируются:
rect.translate(50, 50).rotate(30).scale(1.5);
Здесь прямоугольник сначала смещается, затем поворачивается, а затем увеличивается.
Поворот можно анимировать, используя метод .animate().
Пример плавного вращения на 360° за 2 секунды:
rect.animate(2000, '<>').rotate(360);
'linear',
'<>', 'ease-in' и др.).Можно комбинировать анимацию поворота с другими трансформациями:
rect.animate(3000).rotate(180).scale(2);
В этом случае обе трансформации выполняются параллельно.
Чтобы узнать текущий угол поворота элемента, используется метод
.transform(), который возвращает объект с параметрами
трансформации:
const t = rect.transform();
console.log(t.rotation); // выводит угол поворота в градусах
Если элемент не был повёрнут вручную, свойство rotation
возвращает 0.
Часто требуется вращать элементы вокруг точек, не совпадающих с
центром. Для этого удобно использовать цепочку .center() и
.rotate():
rect.center(200, 150).rotate(90);
Здесь центр прямоугольника временно смещается в точку (200, 150),
после чего выполняется вращение на 90°. Важно помнить, что метод
.center() изменяет координаты элемента, что влияет на
дальнейшие трансформации.
SVG.js позволяет реализовать интерактивное вращение через события мыши:
rect.on('mousedown', function(event) {
let startAngle = event.offsetX; // начальная точка
rect.on('mousemove', function(ev) {
let angle = ev.offsetX - startAngle;
rect.rotate(angle);
});
});
Таким образом можно создавать динамическую визуализацию, реагирующую на движение курсора.
При работе с SVG.js элементы можно объединять в группы
через group(). Поворот группы поворачивает все вложенные
элементы относительно точки группы:
const group = draw.group();
group.add(rect).add(draw.circle(50).fill('#0f6'));
group.rotate(45, 200, 200);
Это позволяет создавать сложные композиции, которые можно вращать как единое целое.
SVG.js обеспечивает корректное сохранение трансформаций при изменении атрибутов, что упрощает создание сложной анимации и графики.