缩放 Canvas 时保持标签与控制柄的屏幕尺寸不变
缩放舞台时,所有内容都会一起缩放——包括你本想用作界面的部分。标签在 20% 时无法辨认, 在 400% 时又大得离谱。拖动控制柄会一直变大,直到盖住它本该调整的图形。
解决办法是按舞台缩放比例的倒数来缩放这些节点,让两者相互抵消。
const s = stage.scaleX();
label.scale({ x: 1 / s, y: 1 / s });
节点在场景坐标中的位置保持不变,因此它仍会跟随所属的图形移动。只有尺寸不再变化。
何时重新计算
请在改变缩放的同一个处理函数中执行。并不存在名为 scale change 的事件——Konva 的属性事件
命名规则是 <attr>Change,因此真正的事件是 scaleXChange:
// Correct: fires when scaleX is set.
stage.on('scaleXChange', updateLabels);
// Not a real event. This handler will never run, silently.
stage.on('scale change', updateLabels);
监听 scaleXChange 是可行的,但通常直接在滚轮处理函数中调用你的更新函数会更简单,
而且能把重绘集中在一处。