使用antv/X6实现流程图(包括线条动画流动,路径标签,悬浮窗口等)快速搭建流程图,DAG图等初始实践记录


最近需要将深度学习网络结构图以比较直观的形式在前端显示出来,对于数据的传输,计划使用数据路径流动的形式来做,因为我也没怎么学过前端变成,对于自己写js和css代码,感觉之后会出不少问题,前端显示的美观度,自适应窗口大小,组件位置的自适应等都是问题,搜了搜相关的教程推荐,发现阿里开发的antv/X6插件用来做流程图,以及网络结构图还是具有不错的效果的,以下是我的按照教程的一些学习操作:

开始使用

接下来我们就一起来创建一个最简单的 start--> end 应用。

Step 1 创建容器

在页面中创建一个用于容纳 X6 绘图的容器,可以是一个 div 标签。

<html>
<head>
    <style type="text/css">
        .expa {
     
            width: 400px;
            height: 400px;
            //将边框显示出来
            border: 3px solid #F00;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="expa" id="container"></div>
</body>
</html>

Step 2 准备数据

X6 支持 JSON 格式数据,该对象中需要有节点 nodes 和边 edges 字段,分别用数组表示:

<script>
	const data = {
     
            // 节点
        nodes: [
            {
     
                id: 'node1', // String,可选,节点的唯一标识
                x: 100, // Number,必选,节点位置的 x 值
                y: 100, // Number,必选,节点位置的 y 值
                width: 80, // Number,可选,节点大小的 width 值
                height: 40, // Number,可选,节点大小的 height 值
                label: 'start', // String,节点标签
        	},
        	{
     
                id: 'node2', // String,节点的唯一标识
                x: 200, // Number,必选,节点位置的 x 值
                y: 200, // Number,必选,节点位置的 y 值
                width: 80, // Number,可选,节点大小的 width 值
                height: 40, // Number,可选,节点大小的 height 值
                label: 'end', // String,节点标签
             },
        ],
        // 边
        edges: [{
     
            source: 'node1', // String,必须,起始节点 id
            target: 'node2', // String,必须,目标节点 id
        }, ],
    };
</script>

Step 3 渲染画布

首先,我们需要创建一个 Graph 对象,并为其指定一个页面上的绘图容器,通常也会指定画布的大小。我在之前已经指定container的大小,不需要重新指定了

//使用npm安装x6,之后引用,使用的就是下面的形式,在vue里面可以这么使用
import {
    Graph } from '@antv/x6';
const graph = new Graph({
   
  container: document.getElementById('container'),
  //width: 800,
  //height: 600,
});

我使用的是js文件引入形式,在html页面相对来说好操作

<script src="https://unpkg.com/@antv/x6/dist/x6.js"></script>
<script>
  const graph = new X6.Graph({
     
    container: document.getElementById('container'),
    //width: 800,
    //height: 600,
  });
</script>

然后,我们就可以使用刚刚创建的 graph 来渲染我们的节点和边。

graph.fromJSON(data)

在这里插入图片描述

得到下图:

取消节点的移动

此时节点node是可以移动的,有时候我们并不想让它移动,可以使用以下代码:

const graph = new X6
### 使用 Vue3 和 TypeScript 实现流程图组件或形编辑器 要实现一个基于 Vue3 和 TypeScript 的流程图组件或形编辑器,可以从以下几个方面入手: #### 1. 技术栈的选择 推荐的技术栈包括 Vue3、TypeScript、Pinia(状态管理)、以及 AntV X6 或 LogicFlow 这样的绘库。这些工具能够帮助快速构建复杂的交互式表。 - **Vue3**: 提供强大的响应式机制和组合 API 支持。 - **TypeScript**: 增强代码的安全性和可维护性。 - **AntV X6**: 是一款专注于 DAG 表的开源框架,适合用于复杂关系网络的展示[^2]。 - **LogicFlow**: 另一种流行的流程图绘制库,提供了丰富的内置功能和支持自定义扩展的能力[^3]。 #### 2. 初始化项目结构 使用 Vite 创建一个新的 Vue3 + TypeScript 项目: ```bash npm create vite@latest my-flowchart --template vue-ts cd my-flowchart npm install ``` 安装必要的依赖项: ```bash npm install @antv/x6 --save # 如果选择 LogicFlow,则替换为 npm install logicflow @logicflow/core npm install pinia ``` #### 3. 配置 Pinia 状态管理 为了更好地管理和同步全局的状态,在 `src/stores` 下创建 store 文件夹,并配置基础 Store 结构: ```typescript // src/stores/index.ts import { defineStore } from 'pinia'; export const useFlowChartStore = defineStore('flowchart', { state: () => ({ nodes: [], edges: [] }), actions: { addNode(node) { this.nodes.push(node); }, removeNode(id) { this.nodes = this.nodes.filter(n => n.id !== id); } } }); ``` #### 4. 组件设计与实现 ##### (1) 流程图容器组件 编写一个名为 FlowChart.vue 的组件作为主要画布区域: ```vue <template> <div ref="containerRef" class="flow-container"></div> </template> <script lang="ts"> import { defineComponent, onMounted, ref } from 'vue'; import { Graph } from '@antv/x6'; // 替换为 LogicFlow 如需其他库 import { useFlowChartStore } from '../stores'; export default defineComponent({ name: 'FlowChart', setup() { const containerRef = ref<HTMLDivElement | null>(null); onMounted(() => { if (!containerRef.value) return; const graph = new Graph({ container: containerRef.value, width: 800, height: 600, grid: true }); graph.addNode({ shape: 'rect', x: 50, y: 50, width: 100, height: 40 }); } return { containerRef }; }, }) </script> <style scoped> .flow-container { border: 1px solid #ccc; background-color: #f9fafc; min-height: 600px; position: relative; overflow: hidden; } </style> ``` ##### (2) 节点拖拽与连接支持 如果选用 AntV X6 库,可以通过其内置的功能轻松实现节点之间的连线操作;如果是 LogicFlow 则需要额外关注插件系统的集成情况。 #### 5. 数据持久化与导出功能 允许用户保存当前编辑的内容到本地或者服务器端数据库中去。可以借助 JSON 格式的序列化方式来存储所有的节点位置信息及其关联关系。 ```javascript function exportData(graphInstance){ let data = graphInstance.toJSON(); console.log(data); // 将此对象转换成字符串形式并通过接口上传至后台服务 } ``` --- ###
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值