使用 node.destroy() 时如何删除 konva 形状/图像

Posted

技术标签:

【中文标题】使用 node.destroy() 时如何删除 konva 形状/图像【英文标题】:How to delete a konva shape/image , when using node.destroy() 【发布时间】:2020-10-04 00:40:53 【问题描述】:

在使用 konva 时,我使用一个按钮将形状多次添加到我的舞台上 使用类似于

的东西
      document.getElementById('Rect').addEventListener( "click" , function () 

        let layer = new Konva.Layer();

        let item = new Konva.Rect(
          x: 20,
          y: 20,
          width: 100,
          height: 50,
          fill: 'green',
          stroke: 'black',
          strokeWidth: 4,
          draggable: true,
        );

这会附加一个矩形形状,如果多次单击它还会附加额外的形状 我想为用户提供删除他希望使用按钮删除的特定形状的选项。 我尝试使用 Konva Tutorials 提供的上下文菜单教程,但是在实现那里可用的删除功能时

        document.getElementById('delete-button').addEventListener('click', () => 

          currentShape.destroy();

          layer.draw();
        );

无法删除添加到形状中的transformer层

        document.getElementById('delete-button').addEventListener('click', () => 
          tr.detach();
          currentShape.destroy();

          layer.draw();
        );

我试图分离转换器/隐藏它,但它从形状的所有可用实例中删除它

如何解决这个问题,非常感谢!!

【问题讨论】:

你能做一个演示吗?正如我所见,您在每次单击按钮时都会添加一个新图层。我不确定这是正确的行为。此外,您需要重绘放置变压器的图层。 嘿,谢谢您的回复,演示链接:codepen.io/Tulsani/pen/OJMRQPr 在这里,如果我尝试使用舞台上的按钮添加两个矩形并删除一个,则剩余一个的变压器也会被删除。谢谢你的帮助!! 【参考方案1】:

您正在为“添加”按钮的 click 事件内部的“删除”按钮添加一个新的 click 事件侦听器。这意味着每次单击“删除”时都会触发所有侦听器。这将删除所有转换器。

相反,您只需添加一次click 侦听器,然后手动找到活动的Transformer 即可将其删除。

document.getElementById('delete-button').addEventListener('click', () => 
  const tr = layer.find('Transformer').toArray().find(tr => tr.nodes()[0] === currentShape);
  tr.destroy();
  currentShape.destroy();
  layer.draw();
);

https://codepen.io/lavrton/pen/VweKqrp?editors=0010

【讨论】:

您好,非常感谢您的帮助,我需要更多帮助,如何才能使此功能适用于多种形状。在这里,当使用它删除一个矩形时,它可以工作,但是当我还添加一个“添加圆圈”按钮时,它无法删除圆圈,但对矩形工作得很好。谢谢 !!相同的演示:codepen.io/Tulsani/pen/JjGRVZK

以上是关于使用 node.destroy() 时如何删除 konva 形状/图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在屏幕点击时删除 GWT 菜单栏?

如何在迭代时从地图中删除?

在离子框架中使用复选框时如何从离子标签中删除空间

如何在迭代字典时从字典中删除项目?

二叉树

如何在镶木地板文件中使用 K-means