G6 总结

我学习G6看的几篇文章:
1、G6入门
2、关于antV G6中的on事件、util.each事件及update方法等的使用总结
3、tooltip 节点提示框

1、拖拽、缩放——内置的交互行为
在 G6 中使用内置 Behavior 的方式非常简单,只需要在图实例化时配置 modes。拖拽和缩放属于 G6 内置交互行为,修改代码如下:

const graph = new G6.Graph({
  // ...                                          // 其他配置项
  modes: {
    default: ['drag-canvas', 'zoom-canvas', 'drag-node'], // 允许拖拽画布、放缩画布、拖拽节点
  },
});

2、点击事件

     // 节点左击
      graph.on('node:click', function(evt) {
        //获取当前节点数据信息
        console.log('节点左击', evt)
        alert('节点左击')
      }),
        //  节点右击
      graph.on('node:contextmenu', function(evt) {
          //当前节点定位
          console.log('节点右击', evt)
          alert('节点右击')
      })

3、线路

      defaultEdge: {
          type: 'line',
          style: {
            endArrow: true,
            endArrow: {
              path: G6.Arrow.triangle(5, 10, 10), // 使用内置箭头路径函数,参数为箭头的 宽度、长度、偏移量(默认为 0,与 d 对应)
              d: 10,
                // path: G6.Arrow.triangle(5, 10, 10),
                // d: 8
                // path: 'M 0,0 L 8,4 L 8,-4 Z',
                // fill: '#e2e2e2'
              fill: '#ccc'
            },
            style: {
              stroke: '#eaff8f',
              lineWidth: 0
            }
          }
        }

4、布局

     layout: {
          type: 'dagre',
          rankdir: 'LR'
     },

5、 贝塞尔曲线 + 线上加圆点
6、填充颜色

 style: {
   fill: '#67c23a' ,
   lineWidth: 1
 },

7、线上加文字

edges  数据:
     target: item.target,
     source: item.source,
     style: item.style,
     label: '正在执行',

8、节点使用图片

nodes  数据:
	shape: 'image',
	img: this.pngSrc,
	size: item.type == '1' ? [50, 50] : 50,

9、画布的清空

 this.graph.destroy()
 this.init()

10、画布自适应 显示全部的节点

	fitView:'autoZoom',

11、缩略图

    const minimap = new G6.Minimap({
        size: [100, 100],
        className: 'minimap',
        type: 'delegate'
      })
	plugins: [minimap]  //配置插件

12、更新节点,不重新绘制

		const node = this.graph.findById(id)
        this.graph.updateItem(node, {
          //节点大小
          size: 50,
          // 节点上文本的样式
          labelCfg: {
            style: {
              fill: '#000',
              fontSize: 15
            }
          }
        })

12、动态计算长度 (解决label文字长短不一的方案)

nodeStyleConfig(label) {
      let width = label.length
      let height = 30
      let size
      let reg = /[a-z,A-Z,_]/
      if (reg.test(label)) {
        size = [(width * this.fontSize) / 2 + 30, height]
      } else {
        size = [width * this.fontSize, height]
      }
      return size
    },

13、保持缩放比例

//在拉取新数据重新渲染页面之前先获取当前缩放比例
const zoom = graph.getZoom();

//此处获取数据
await getData()

//缩放至之前的比例
graph.zoomTo(zoom);

14、保持画布位置

//在拉取新数据重新渲染页面之前先获取点(0, 0)在画布上的位置
const lastPoint = graph.getCanvasByPoint(0, 0);

//此处获取数据。。。
await getData()

//获取重新渲染之后点(0, 0)在画布的位置
const newPoint = graph.getCanvasByPoint(0, 0);

//移动画布相对位移
graph.translate(lastPoint.x - newPoint.x, lastPoint.y - newPoint.y);

15、画布宽高为 自适应

	  //parentContent 为父级 div
      this.canvasWidth = this.$refs.parentContent.clientWidth
      this.canvasHeight = this.$refs.parentContent.clientHeight
      this.graph = new G6.Graph({
        container: 'container',
        width: this.canvasWidth,
        height: this.canvasHeight
      })

15、tooltip 节点提示框

在这里插入图片描述

modes: {
    default: [
      'drag-canvas',
      'zoom-canvas',
      'drag-node',
      {
        type: 'tooltip',
        // offset: -50,
        formatText: function formatText(model) {
          return model.oriLabel || model.label          //   <----------- 关键
        },
        shouldUpdate: function shouldUpdate(e) {
          return true
        }
      }
    ] // 允许拖拽画布、放缩画布、拖拽节点
  }

16、G6画布大小自适应 关键 ===> changeSize
浏览器窗口发生变化时,画布自适应窗口大小
G6图 进行放大缩小,全屏操作

fullScreen() {
   this.isFullScreen = true
   this.$emit('isFullScreenFn', this.isFullScreen)
   // this.graph.destroy()
   setTimeout(() => {
     // this.render()
     var canvasWidth = parseInt(document.getElementsByClassName('bloodBorne')[0].offsetWidth)
     var canvasHeight = parseInt(document.getElementsByClassName('bloodBorne')[0].offsetHeight)
     this.graph.changeSize(canvasWidth, canvasHeight)
     //this.graph.fitCenter()  // 将图移动到画布中心位置
   }, 300)
 },

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340