Skip to main content

HTML5 Canvas 强制更新教程

Konva.Transformer 会自动跟踪附加节点的属性。 因此,它会自动采用自己的属性。

但是在某些情况下,Konva.Transformer 无法做到这一点。目前,Konva.Transformer 不能追踪 Konva.Group 节点内部的深层变化。在这种情况下,您需要使用 forceUpdate 方法来重置变换工具。

使用说明:点击按钮。查看变换器如何变化。

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 group = new Konva.Group({
x: 50,
y: 50,
draggable: true,
});
layer.add(group);

const text = new Konva.Text({
text: '这里是一些文本',
fontSize: 24,
});
group.add(text);

const rect = new Konva.Rect({
width: text.width(),
height: text.height(),
fill: 'yellow',
});
group.add(rect);

// 将形状添加到层中
rect.moveToBottom();

const tr = new Konva.Transformer({
nodes: [group],
padding: 5,
// 只能启用一个锚点
enabledAnchors: ['middle-left', 'middle-right'],
});
layer.add(tr);

const button = document.createElement('button');
button.innerHTML = '更改文本';
document.body.appendChild(button);
button.addEventListener('click', () => {
text.text('这里是另一些内容');
rect.width(text.width());
// 我们需要手动更新变换器
tr.forceUpdate();
});