antv/g6,首次使用遇到的一些问题

3,810 阅读2分钟

之前只用过echarts做过统计图表,文档还算熟悉。这次需要使用antv/g6做关系图,之前没使用过,但是有小伙伴已经安装了@antv/g6 3.1.1,并写了简单的demo,后续由我来做,但遇到了一些问题,如版本问题,polyline快点问题,添加同级节点问题。好在最后通过升级版本,添加同级节点,创建自定义边解决了问题。

官方文档:g6.antv.antgroup.com/manual/gett…

demo完整代码:code.juejin.cn/pen/7401782…

核心问题

影响到需求开发的一些问题

1、版本问题

问题描述

由于最开始使用3.1.1的版本,导致了一下问题

  • 查询文档极慢,国内镜像504
  • 部分功能不可用,如combo;更改状态后节点的字体颜色
  • 没有向下兼容,节点形状在3.1.1版本是shape,4.8.21改为type

解决方案

升级版本至4.8.21

www.npmjs.com/package/@an…

目前@antv/g6最高是5.0.13,官方文档的版本是4.8.21,使用的是3.1.1。所以推荐4.8.21,方便查阅文档

2、polyline拐点问题

对应的issue:github.com/antvis/G6/i…

问题描述

当使用polyline作为边时,可能由于节点大小、层间距、子节点数量等原因,导致绘制的path拐点不一致。虽然拐点的位置虽然可以通过offset更改,但拐点位置确实很难控制,也不能解决这个问题。

解决方案

自定义边,计算拐点的位置。这里是将拐点设置在1/2处。

11111.png

3、添加同级节点问题

问题描述

dagre层次布局只能在一个方向(竖直/水平),无法在竖直排序时,直接往右侧添加节点。

直接添加数据会使额外节点和节点3-1、节点3-2同级。

解决方案

动态添加节点。获取指定节点的x、y,新建一个隐藏节点,设置右侧连接线锚点,将需添加的节点动态添加到隐藏节点上。

如果有多个,可能和其他部分重叠,需动态更改后续节点的y值,防止重叠。

22222.png

零散问题

修改一些影响体验的问题

1、图未完全居中

实例化时,给画布的宽高和容器的宽高不一致导致。

2、缩放

缩放值的范围默认是0.02~10,可能存在缩放过大或过小的问题。可通过设置minZoom、maxZoom

{
  // ...
  // 根据实际情况设置
  minZoom: 0.1,
  maxZoom: 5,
}

自定义功能

可能会用到的工具栏

1、居中

直接调用实例方法。

graph.fitView(undefined, undefined, true, {
  duration: 100
})

2、Resize

每次resize都更新画布大小

window.addEventListener('resize', () => {
  onResize()
})
  
function onResize() {
  let width = document.querySelector('#g6-container').clientWidth
  let height
  if(document.fullscreenElement) {
    height = window.innerHeight
  } else {
    height = 600
  }
  graph.changeSize(width, height)
  graph.render()
}

3、全屏

function fullScreenG6() {
  const fullEl = document.querySelector('.app-container')
  if(document.fullscreenElement) {
    document.exitFullscreen()
  } else {
    fullEl.requestFullscreen()
  }
}

4、放大/缩小

function onZoom(num) {
  const zoom = graph.getZoom()
  graph.zoomTo(zoom + num, {
    x: window.innerWidth / 2,
    y: window.innerHeight / 2
  }, true, {
    duration: 100
  })
}