调整图形尺寸、旋转图形

获取Konva最新的信息

Transformer 是一种特殊的 Konva.Group。它可以方便的调整节点尺寸和旋转节点,它可以操作一个或者一组节点。

如何使用:

  1. 新建一个new Konva.Transformer()的实例
  2. 将它添加到 Layer
  3. 将节点附加到 transformer, transformer.nodes([shape]);
  4. 通过 layer.batchDraw() 更新图层

提示: 当你调整尺寸时变形工具没有改变节点的 widthheight 属性,而是改变了 scaleXscaleY属性。

说明: 试试调整图形的尺寸和旋转图形。点击空白区域取消选择,按住 SHIFT 或者 CTRL 将图形添加或移除选择。试试用鼠标划一个选区。

Konva Shape transform and selection Demoview raw
<!DOCTYPE html>
<html>
<head>
<!-- USE DEVELOPMENT VERSION -->
<script src="https://unpkg.com/konva@4.0.18/konva.min.js"></script>
<meta charset="utf-8" />
<title>Konva Select and Transform Demo</title>
<style>
body {
margin: 0;
padding: 0;
overflow: hidden;
background-color: #f0f0f0;
}
</style>
</head>

<body>
<div id="container"></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();
stage.add(layer);

var rect1 = new Konva.Rect({
x: 60,
y: 60,
width: 100,
height: 90,
fill: 'red',
name: 'rect',
draggable: true
});
layer.add(rect1);

var rect2 = new Konva.Rect({
x: 250,
y: 100,
width: 150,
height: 90,
fill: 'green',
name: 'rect',
draggable: true
});
layer.add(rect2);
layer.draw();

stage.on('click tap', function(e) {
// if click on empty area - remove all transformers
if (e.target === stage) {
stage.find('Transformer').destroy();
layer.draw();
return;
}
// do nothing if clicked NOT on our rectangles
if (!e.target.hasName('rect')) {
return;
}
// remove old transformers
// TODO: we can skip it if current rect is already selected
stage.find('Transformer').destroy();

// create new transformer
var tr = new Konva.Transformer();
layer.add(tr);
tr.attachTo(e.target);
layer.draw();
});
</script>
</body>
</html>