Vue项目中使用AntV G6绘制自适应图谱
创始人
2024-03-18 13:13:20
0

Vue项目中使用AntV G6绘制自适应图谱

一、需求

  • 需求1:Vue3.x项目下使用AntV G6绘制图谱

  • 需求2:图谱节点为两个IP地址,节点间存在多条连线情况

  • 需求3:鼠标悬浮到节点上方时,高亮当前节点并出现tooltip气泡提示,展示相关信息

  • 需求4:点击图谱连线后需要高亮关联节点和当前连线

  • 需求5:图谱大小需要保证自适应(这里可以是根据窗口自适应,也可以是可调整大小的弹窗DOM内的自适应,后续会分开实现)

二、实现

1.初始Vue3.x的项目可以看之前的博客:通过vite搭建Vue3.x项目,初始化项目后需要安装AntV G6的依赖,执行如下命令:

npm install --save @antv/g6

2.安装G6后在需要使用的页面进行导入,在创建好容器后利用G6进行实例化创建一个画布,后续的图谱绘制都将在画布内进行,目前为止需求1部分已经完成了,代码如下:


3.为了方便后续步骤的进行,这里先造一些节点和连线的数据,大致仿照 G6官网示例中的数据,根据需求2在模拟数据的边集中添加两个节点存在多条连线的情况(实际场景下根据实际数据做处理即可),如下:


4.创建好模拟数据后继续完善画布的配置,这时可以参考官网的Api对画布、节点样式、连线样式、气泡提示tooltip进行一些配置

  • 这里需要注意的是,拖动画布或缩放画布时有概率出现**残影(拖影)**的问题,需要单独处理
  • 利用G6的工具函数将连线类型设置为贝塞尔曲线就能保证两个节点之间多条连线不会出现重叠的问题,这样就实现了需求2的部分
  • 需求3则利用G6实例化一个Tooltip后,再利用plugins字段配置到到画布内,当鼠标移入节点时会出现一个tooltip显示节点的IP地址(id),但是移出节点后tooltip并不会消失,需要在移出节点的事件中单独处理一次
  • 需求4可以给节点添加一个点击事件,根据点击的节点信息找到关联的两个节点的IP地址(id)并进行高亮处理
  • 代码如下:

5.需求5要分成两种情况来说

  • 第一种情况是窗口大小改变时影响到画布,可以直接通过监听窗口windowresize来对画布进行自适应的操作,代码如下:

  • 第二种情况就稍微复杂一些,笔者实际中的业务是在一个可以拖动改变大小的弹窗中实现画布自适应;同理这里可以是收起导航菜单影响到画布的DOM亦或是改变布局等方式影响了画布的DOM大小发生改变,总之就是画布所在的DOM元素大小发生改变时的自适应,因为不是window的大小改变,所以不能使用第一种监听windowresize方式来处理,笔者这里使用的是一个jselement-resize-detector用来监听画布的DOM大小是否改变,步骤如下:

    • 安装element-resize-detector库,详情:https://www.npmjs.com/package/element-resize-detector
    npm install --save element-resize-detector
    
    • 使用element-resize-detector监听目标DOM大小是否发生改变
    
    

6.最后在界面卸载时需要释放一次资源,将画布资源进行释放,代码如下:


7.最终效果如下图,方便学习代码demo会放到Gitee上,笔者根据需求5拆分出了两个示例,方便针对不同场景做不同的处理,仓库地址:g6_learning: Vue3+Elemet Plus+G6绘制自适应图谱demo (gitee.com),CSDN资源地址:g6_learning: Vue3+Elemet Plus+G6绘制自适应图谱demo(csdn)
在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...