antv/x6 怎么 删除线和节点

1,247 阅读3分钟

在 AntV X6 中,你可以使用以下方法来删除线(edges)和节点(nodes): (以下方法都是在初始化中)

  1. 删除节点:
const cell = graph.getCellById(nodeId); // nodeId 是你想删除的节点的 ID
graph.removeCell(cell);
  1. 删除线:
const cell = graph.getCellById(edgeId); // edgeId 是你想删除的线的 ID
graph.removeCell(cell);

如果你想删除所有的节点和线,可以遍历所有的元素并逐个删除:

graph.getNodes().forEach((node) => {
  graph.removeCell(node);
});
 
graph.getEdges().forEach((edge) => {
  graph.removeCell(edge);
});

如果想鼠标选中线和节点获取线或者节点id



let edgeAnodeIdCell = ref(null)
  // 选中节点事件
  graph.on("node:click", (node) => {
    console.log("node", node.cell.data);
    if (node.cell.data != undefined) {
      let nodeId = node.cell.id;//nodeId 是你想删除节点的ID
      const cell = graph.getCellById(nodeId); // graph.getCellById :可以根据id获取线或者节点的信息; graph.getCells获取所有节点和边的信息
      edgeAnodeIdCell.value = cell;///节点信息
    }
  });

  // 选中线事件
  graph.on("edge:click", (edge) => {
    console.log("edge", edge.cell.id);
    if (edge.cell.id !== undefined) {
      let edgeId = edge.cell.id;//edgeId 是你想删除的线的 ID
      const cell = graph.getCellById(edgeId); // graph.getCellById :可以根据id获取线或者节点的信息; graph.getCells获取所有节点和边的信息
      edgeAnodeIdCell.value = cell;///线信息
    }
  });

如果监听键盘的Delete键按下事件,删除线或者删除节点

// 监听键盘的Delete键按下事件,删除线或者删除节点
  document.addEventListener("keydown", (event) => {
    if (event.key === "Delete" || event.key === "Backspace") {
      graph.removeCell(edgeAnodeIdCell.value);
      console.log("删除线或者节点", edgeAnodeIdCell.value);
    }
  });

请确保在调用 removeCell 方法时,你有相应的权限,并且在图形编辑器没有处于编辑模式的情况下进行操作。

antv/x6 所有事件: AntV X6 是一个基于 JavaScript 的图形绘制和编辑库,它提供了丰富的事件系统来处理用户交互。以下是一些 AntV X6 中的常见事件类型及其描述:

一、鼠标事件

  1. cell:click:当单击任意单元格(节点或边)时触发。
  2. node:click:当单击节点时触发。
  3. edge:click:当单击边时触发。
  4. blank:click:当单击画布空白区域时触发。
  5. cell:dblclicknode:dblclickedge:dblclick:对应元素的双击事件。
  6. cell:contextmenunode:contextmenuedge:contextmenu:对应元素的右键点击事件。
  7. cell:mousedownnode:mousedownedge:mousedownblank:mousedown:鼠标按下事件。
  8. cell:mouseupnode:mouseupedge:mouseup:鼠标抬起事件。
  9. cell:mousemovenode:mousemoveedge:mousemove:鼠标移动事件,注意这个事件需要在鼠标按下后移动鼠标才能触发。
  10. cell:mousewheelnode:mousewheeledge:mousewheel:鼠标滚轮事件。
  11. cell:mouseenternode:mouseenteredge:mouseentergraph:mouseenter:鼠标进入元素或画布时触发。
  12. cell:mouseleavenode:mouseleaveedge:mouseleave:鼠标离开元素时触发。

二、拖拽事件

  1. node:move:开始移动节点时触发。
  2. node:moving:移动节点时持续触发。
  3. node:moved:移动节点后触发。
  4. edge:moveedge:movingedge:moved:对应边的拖拽事件。

三、大小调整事件

  1. node:resize:开始调整节点大小时触发。
  2. node:resizing:调整节点大小时持续触发。

四、画布事件

  1. scale:缩放画布时触发,包含缩放比例和缩放中心等参数。
  2. resize:改变画布大小时触发,包含画布的新宽度和高度。
  3. translate:平移画布时触发,包含平移的偏移量。

五、自定义事件

除了上述内置事件外,AntV X6 还支持自定义事件。你可以在节点或边的 DOM 元素上添加自定义属性(如 event 或 data-event),并通过监听这些自定义事件名来触发相应的处理逻辑。例如:

node.attr({ // 表示一个删除按钮,点击时删除该节点 image: { event: "node:delete", xlinkHref: "trash.png", width: 20, height: 20, }, }); graph.on("node:delete", ({ view, e }) => { e.stopPropagation(); view.cell.remove(); });

六、其他事件

AntV X6 还可能提供其他类型的事件,具体取决于库的版本和配置。为了获取最准确和最新的事件列表,建议查阅 AntV X6 的官方文档或源代码。

总之,AntV X6 的事件系统非常强大和灵活,可以满足各种复杂的用户交互需求。通过合理使用这些事件,你可以实现丰富的图形编辑和交互功能。