从 JSON 加载 HTML5 Canvas 阶段的教程

如何从 JSON 导入画布?

为了加载一个原本包含图像和事件绑定的复杂舞台,我们需要使用 Konva.Node.create() 创建一个舞台节点,然后借助选择器使用 find() 方法设置图像和事件处理程序。图像和事件处理程序必须手动设置,因为它们是不可序列化的。

该方法适用于小型应用程序。对于更复杂的情况,请查看 最佳实践

Konva Load Complex Stage Demoview raw
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/konva@9.3.18/konva.min.js"></script>
<meta charset="utf-8" />
<title>Konva Load Complex Stage Demo</title>
<style>
body {
margin: 0;
padding: 0;
overflow: hidden;
background-color: #f0f0f0;
}
</style>
</head>
<body>
<div id="container"></div>
<script>
var json =
'{"attrs":{"width":578,"height":200},"className":"Stage","children":[{"attrs":{},"className":"Layer","children":[{"attrs":{"width":"auto","height":"auto","text":"Text Shadow!","fontFamily":"Calibri","fontSize":95,"x":20,"y":20,"stroke":"red","strokeWidth":2,"shadowColor":"black","shadowBlur":2,"shadowOffsetX":10,"shadowOffsetY":10,"shadowOpacity":0.5},"className":"Text"},{"attrs":{"stroke":"green","strokeWidth":10,"lineJoin":"round","lineCap":"round","points":[{"x":50,"y":140},{"x":450,"y":160}],"shadowColor":"black","shadowBlur":10,"shadowOffsetX":5,"shadowOffsetY":5,"shadowOpacity":0.5},"className":"Line"},{"attrs":{"x":280,"y":100,"width":100,"height":50,"fill":"#00D2FF","stroke":"black","strokeWidth":4,"shadowColor":"black","shadowBlur":10,"shadowOffsetX":5,"shadowOffsetY":5,"shadowOpacity":0.5,"rotation":0.35038503988659,"id":"blueRectangle"},"className":"Rect"},{"attrs":{"x":100,"y":41,"width":106,"height":118,"id":"yodaImage"},"className":"Image"}]}]}';

var stage = Konva.Node.create(json, 'container');

/*
* set functions
*/
stage.findOne('#blueRectangle').on('mouseover mouseout', function () {
var stroke = this.stroke();
this.stroke(stroke === 'black' ? 'red' : 'black');
});
/*
* set images
*/
var imageObj = new Image();
imageObj.onload = function () {
stage.findOne('#yodaImage').image(imageObj);
};
imageObj.src = '/assets/yoda.jpg';
</script>
</body>
</html>