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

标签 javascript html canvas html5-canvas konvajs

在使用 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 教程中提供的上下文菜单教程,但是在实现那里提供的删除功能时

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

          currentShape.destroy();

          layer.draw();
        });

无法删除添加到形状的更改器(mutator)层

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

          layer.draw();
        });

我尝试分离变压器/隐藏它,但它从形状的所有可用实例中删除了它

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

最佳答案

您正在为“添加”按钮的 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

关于javascript - 使用 node.destroy() 时如何删除 konva 形状/图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62374048/

相关文章:

python - 如何在windows上用python 2.7安装beautiful soup 4

javascript - 按纬度经度查找topojson特征

html - 从文本 html Canvas 中提取路径

javascript - 如果文件存在,使用 ajax 创建一个 "Breaking News"div?

javascript - 如何将 gRPC 定义的 API 引入 Web 浏览器

Javascript 函数在外部 .js 文件中不起作用

jquery - 带内容框的双垂直选项卡

javascript - 自动调整 Canvas 的所有可能尺寸

javascript - 如何制作包含在浏览器上呈现的电话号码的 JSON 元素,以便单击它们即可调用该号码

javascript - 通过单击按钮本身关闭下拉菜单