相关文章推荐
  • 新建一个 new Konva.Transformer() 的实例
  • 将它添加到 Layer
  • 将节点附加到 transformer , transformer.nodes([shape]);
  • 通过 layer.batchDraw() 更新图层
  • 提示: 当你调整尺寸时变形工具没有改变节点的 width height 属性,而是改变了 scaleX scaleY 属性。

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

    Konva Shape transform and selection Demo view 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>
    Prev Next
     
    推荐文章