# g6_stu
**Repository Path**: osvue/g6_stu
## Basic Information
- **Project Name**: g6_stu
- **Description**: antv g6
* 展示居多用
* 涉及编辑保存 选择X6
- **Primary Language**: JavaScript
- **License**: ECL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-04-23
- **Last Updated**: 2024-04-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 项目初始化
~~~bash
npm install
~~~
# 项目启动
~~~bash
npm run dev
~~~
# Vue3.x使用G6绘制自适应图谱
## 一、需求
- 需求1:`Vue3.x`项目下使用`AntV G6`绘制图谱
- 需求2:图谱节点为两个`IP`地址,节点间存在**多条连线**情况
- 需求3:鼠标悬浮到节点上方时,高亮当前节点并出现`tooltip`气泡提示,展示相关信息
- 需求4:点击图谱连线后需要**高亮**关联节点和当前连线
- 需求5:图谱大小需要保证**自适应**(这里可以是根据窗口自适应,也可以是可调整大小的弹窗`DOM`内的自适应,后续会分开实现)
## 二、实现
1.初始`Vue3.x`的项目可以看之前的博客:[通过vite搭建Vue3.x项目](https://blog.csdn.net/baoyin0822/article/details/123200907),初始化项目后需要安装`AntV G6`的依赖,执行如下命令:
~~~bash
npm install --save @antv/g6
~~~
2.安装`G6`后在需要使用的页面进行导入,在创建好容器后利用`G6`进行实例化创建一个画布,后续的图谱绘制都将在画布内进行,目前为止需求1部分已经完成了,代码如下:
~~~html
~~~
3.为了方便后续步骤的进行,这里先造一些节点和连线的数据,大致仿照[ G6官网](https://g6.antv.antgroup.com/manual/getting-started)示例中的数据,根据**需求2**在模拟数据的边集中添加两个节点存在多条连线的情况(实际场景下根据实际数据做处理即可),如下:
~~~html
~~~
4.创建好模拟数据后继续完善画布的配置,这时可以参考官网的`Api`对画布、节点样式、连线样式、气泡提示`tooltip`进行一些配置
- 这里需要注意的是,拖动画布或缩放画布时有概率出现**残影(拖影)**的问题,需要单独处理
- 利用`G6`的工具函数将连线类型设置为贝塞尔曲线就能保证两个节点之间多条连线不会出现重叠的问题,这样就实现了**需求2**的部分
- **需求3**则利用`G6`实例化一个`Tooltip`后,再利用`plugins`字段配置到到画布内,当鼠标移入节点时会出现一个`tooltip`显示节点的`IP`地址(`id`),但是移出节点后`tooltip`并不会消失,需要在移出节点的事件中单独处理一次
- **需求4**可以给节点添加一个点击事件,根据点击的节点信息找到关联的两个节点的`IP`地址(`id`)并进行高亮处理
- 代码如下:
~~~html
~~~
5.**需求5**要分成两种情况来说
- **第一种**情况是**窗口**大小改变时影响到画布,可以直接通过监听窗口`window`的`resize`来对画布进行自适应的操作,代码如下:
~~~html
~~~
- **第二种**情况就稍微复杂一些,笔者实际中的业务是在一个可以拖动改变大小的弹窗中实现画布自适应;同理这里可以是收起导航菜单影响到画布的DOM亦或是改变布局等方式影响了画布的DOM大小发生改变,总之就是**画布所在的DOM元素大小发生改变时的自适应**,因为不是`window`的大小改变,所以不能使用第一种监听`window`的`resize`方式来处理,笔者这里使用的是一个`js`库`element-resize-detector`用来监听画布的DOM大小是否改变,步骤如下:
- 安装`element-resize-detector`库,详情:https://www.npmjs.com/package/element-resize-detector
~~~bash
npm install --save element-resize-detector
~~~
- 使用`element-resize-detector`监听目标DOM大小是否发生改变
~~~html
~~~
6.最后在界面卸载时需要释放一次资源,将画布资源进行释放,代码如下:
~~~html
~~~