跳到主要内容

HTML5 Canvas 从角落旋转图形

默认情况下,Konva.Transformer 通过框上方短线末端的旋转锚点来旋转图形。使用 rotateMode 可以选择其他旋转方式:

  • 'handle'(默认)显示旋转锚点。
  • 'corners' 隐藏旋转锚点。框四个角外侧的不可见区域可以旋转图形,与大多数设计工具一致。指针移到这些区域上时,光标会变为弯曲的箭头,指向对应角的方向。
  • 'both' 同时启用旋转锚点和角落区域。

缩放锚点位于这些区域之上。因此,拖动角上的锚点会缩放图形,而在锚点外侧拖动会旋转图形。区域的大小是 anchorSize 的两倍。

在所有模式下,旋转时按住 Shift 可将旋转角度吸附到 15 度的倍数。设置 shiftBehavior: 'none' 可禁用此功能。

通过角落区域旋转图形时,transformer.getActiveAnchor() 返回该区域的名称,例如 'rotater-top-left'。旋转锚点的名称是 'rotater'。

操作说明:将指针移到框的某个角外侧,然后拖动以旋转图形。按住 Shift 可吸附旋转角度。

import Konva from 'konva';

const width = window.innerWidth;
const height = window.innerHeight;

const stage = new Konva.Stage({
container: 'container',
width: width,
height: height,
});

const layer = new Konva.Layer();
stage.add(layer);

const rect = new Konva.Rect({
x: 80,
y: 80,
width: 160,
height: 90,
fill: '#7dd3fc',
stroke: 'black',
draggable: true,
});
layer.add(rect);

const tr = new Konva.Transformer({
nodes: [rect],
rotateMode: 'corners',
});
layer.add(tr);

另请参阅旋转吸附,了解如何在指定角度附近吸附旋转。