KonvaJS:分离后如何保持组中形状的位置和旋转?
KonvaJS: how to keep the position and rotation of the shape in the group after detached?
如何在分离后保持组中形状的位置和旋转和缩放属性?
如果在用户移动或调整大小后分离组中的每个形状、旋转包裹在变形金刚下的组,看起来形状会丢失并更改属性。
我按照源码试试
<button id="ungroup">ungroup</button>
<div id="container"></div>
const stage = new Konva.Stage({
container: 'container',
width: window.innerWidth,
height: window.innerHeight
});
const layer = new Konva.Layer();
stage.add(layer);
const rect = new Konva.Rect({
x : 50, y : 50, width: 100, height: 100,
fill: 'black',
});
const rect2 = new Konva.Rect({
x : 150, y : 50, width: 80, height: 80,
fill: 'red',
});
const group = new Konva.Group({
draggable: true
});
group.add(rect);
group.add(rect2);
const tr = new Konva.Transformer({
node: group
});
layer.add(group);
layer.add(tr);
layer.draw();
document.getElementById('ungroup').addEventListener('click', () => {
tr.remove()
// how can keep the moved or rotated properties?
rect.moveTo(layer);
rect2.moveTo(layer);
group.removeChildren();
group.remove();
layer.draw();
});
一组有两个长方形可以用一个变形金刚移动。
但是在分离它们之后,它们失去了运动、缩放和旋转。
可以取节点的绝对变换矩阵,分离后重新应用到节点。
const transform = node.getAbsoluteTransform();
const attrs = transform.decompose();
node.moveTo(layer);
node.setAttrs(attrs);
如何在分离后保持组中形状的位置和旋转和缩放属性?
如果在用户移动或调整大小后分离组中的每个形状、旋转包裹在变形金刚下的组,看起来形状会丢失并更改属性。
我按照源码试试
<button id="ungroup">ungroup</button>
<div id="container"></div>
const stage = new Konva.Stage({
container: 'container',
width: window.innerWidth,
height: window.innerHeight
});
const layer = new Konva.Layer();
stage.add(layer);
const rect = new Konva.Rect({
x : 50, y : 50, width: 100, height: 100,
fill: 'black',
});
const rect2 = new Konva.Rect({
x : 150, y : 50, width: 80, height: 80,
fill: 'red',
});
const group = new Konva.Group({
draggable: true
});
group.add(rect);
group.add(rect2);
const tr = new Konva.Transformer({
node: group
});
layer.add(group);
layer.add(tr);
layer.draw();
document.getElementById('ungroup').addEventListener('click', () => {
tr.remove()
// how can keep the moved or rotated properties?
rect.moveTo(layer);
rect2.moveTo(layer);
group.removeChildren();
group.remove();
layer.draw();
});
一组有两个长方形可以用一个变形金刚移动。 但是在分离它们之后,它们失去了运动、缩放和旋转。
可以取节点的绝对变换矩阵,分离后重新应用到节点。
const transform = node.getAbsoluteTransform();
const attrs = transform.decompose();
node.moveTo(layer);
node.setAttrs(attrs);