HTML5 Canvas 移动形状到另一个容器教程

要将形状从一个容器移动到另一个容器,可以使用 Konva 的 moveTo() 方法,该方法需要一个容器作为参数。
容器可以是另一个舞台、一个层或一个组。您还可以将组移动到其他组和层中,或者将形状从组直接移动到其他层。

说明:拖动并放置组,观察红色矩形绑定到黄色组或蓝色组。
使用左侧的按钮将框从一个组移动到另一个组。

Konva 移动形状到另一个容器演示view raw
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/konva@9.3.18/konva.min.js"></script>
<meta charset="utf-8" />
<title>Konva Move Shape to Another Container Demo</title>
<style>
body {
margin: 0;
padding: 0;
overflow: hidden;
background-color: #f0f0f0;
}
#buttons {
position: absolute;
left: 10px;
top: 0;
}
button {
margin-top: 10px;
display: block;
}
</style>
</head>
<body>
<div id="container"></div>
<div id="buttons">
<button id="toBlue">Move red box to blue group</button>
<button id="toYellow">Move red box to yellow group</button>
</div>
<script>
var width = window.innerWidth;
var height = window.innerHeight;

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

var layer = new Konva.Layer();
var yellowGroup = new Konva.Group({
x: 100,
y: 100,
draggable: true,
});
var blueGroup = new Konva.Group({
x: 300,
y: 80,
draggable: true,
});

var box = new Konva.Rect({
x: 10,
y: 10,
width: 100,
height: 50,
fill: 'red',
stroke: 'black',
});

var yellowCircle = new Konva.Circle({
x: 0,
y: 0,
radius: 50,
fill: 'yellow',
stroke: 'black',
});

var blueCircle = new Konva.Circle({
x: 0,
y: 0,
radius: 50,
fill: 'blue',
stroke: 'black',
});

// build node tree
yellowGroup.add(yellowCircle);
yellowGroup.add(box);
blueGroup.add(blueCircle);
layer.add(yellowGroup);
layer.add(blueGroup);
stage.add(layer);

// add button event bindings
document.getElementById('toBlue').addEventListener(
'click',
function () {
box.moveTo(blueGroup);
},
false
);

document.getElementById('toYellow').addEventListener(
'click',
function () {
box.moveTo(yellowGroup);
},
false
);
</script>
</body>
</html>