内置边总览

G6 提供了 9 种内置边:

  • line:直线,不支持控制点;
  • polyline:折线,支持多个控制点;
  • arc:圆弧线;
  • quadratic:二阶贝塞尔曲线;
  • cubic:三阶贝塞尔曲线;
  • cubic-vertical:垂直方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点;
  • cubic-horizontal;水平方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点;
  • loop:自环。

这些内置边的默认样式分别如下图所示。内置边总览 - 图1

内置边类型说明

下面表格中显示了内置的各类边,同时对一些特殊的字段进行了说明:

名称描述
line连接两个节点的直线:- controlPoints 不生效- 更多配置详见 line 边的配置内置边总览 - 图2
polyline多段线段构成的折线,连接两个端点:- controlPoints 表示所有线段的拐点,不指定时根据 A* 算法自动生成折线- 更多配置详见 polyline 边的配置内置边总览 - 图3
arc连接两个节点的一段圆弧:- controlPoints 不生效- 使用 curveOffset 指定弧的弯曲程度,其正负影响弧弯曲的方向- 更多配置详见 arc 边的配置内置边总览 - 图4
quadratic只有一个控制点的曲线:- controlPoints 不指定时,会默认线的一半处弯曲- 更多配置详见 quadratic 边的配置内置边总览 - 图5
cubic有两个控制点的曲线:- controlPoints 不指定时,会默认线的 1/3, 2/3 处弯曲- 更多配置详见 cubic 边的配置内置边总览 - 图6
cubic-vertical垂直方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点内置边总览 - 图7
cubic-horizontal水平方向的三阶贝塞尔曲线,不考虑用户从外部传入的控制点内置边总览 - 图8
loop自环。更多配置详见 arc 边的配置内置边总览 - 图9

边的通用属性

所有内置的边支持的通用属性:

名称是否必须类型备注
idfalseString边编号
sourcetrueStringNumber
targettrueString结束点 id
shapefalseString边图形,默认为 'line'
sourceAnchorfalseNumber边的起始节点上的锚点的索引值
targetAnchorfalseNumber边的终止节点上的锚点的索引值
stylefalseObject边的样式属性
labelfalseString文本文字,如果没有则不会显示
labelCfgfalseObject文本配置项

样式属性 style

Object 类型。通过 style 配置来修改边的颜色、线宽等属性。下表是 style 对象中常用的配置项:

名称是否必须类型备注
strokefalseString边的颜色
lineWidthfalseNumber边宽度
lineAppendWidthfalseNumber边响应鼠标事件时的检测宽度,当 lineWidth 太小而不易选中时,可以通过该参数提升击中范围
endArrowfalseBoolean边的结束端是否有箭头
strokeOpacityfalseNumber边透明度
shadowColorfalseString阴影颜色
shadowBlurfalseNumber阴影范围
shadowOffsetXfalseNumber阴影 x 方向偏移量
shadowOffsetXfalseNumber阴影 y 方向偏移量

下面代码演示在实例化图时全局配置方法中配置 style

  1. const graph = new G6.Graph({
  2. container: 'mountNode',
  3. width: 800,
  4. height: 600,
  5. defaultEdge: {
  6. // ... 其他属性
  7. style: {
  8. stroke: '#eaff8f',
  9. lineWidth: 5,
  10. // ... 其他属性
  11. },
  12. },
  13. });

标签文本 label 及其配置 labelCfg

label String 类型。标签文本的文字内容。labelCfg Object 类型。配置标签文本。下面是 labelCfg 对象中的常用配置项:

名称是否必须类型备注
refXfalseNumber标签在 x 方向的偏移量
refYfalseNumber标签在 y 方向的偏移量
positionfalseString文本相对于边的位置,目前支持的位置有: startmiddle, end。默认为middle
autoRotatefalseBoolean标签文字是否跟随边旋转,默认 false
stylefalseObject标签的样式属性

上表中的标签的样式属性 style 的常用配置项如下:

名称是否必须类型备注
fillfalseString文本颜色
strokefalseString文本描边颜色
lineWidthfalseNumber文本描边粗细
opacityfalseNumber文本透明度
fontfalseString文本内容的当前字体属性
fontSizefalseNumber文本字体大小

下面代码演示在实例化图时全局配置方法中配置 labellabelCfg

  1. const graph = new G6.Graph({
  2. container: 'mountNode',
  3. width: 800,
  4. height: 600,
  5. defaultEdge: {
  6. // ... 其他属性
  7. label: 'edge-label',
  8. labelCfg: {
  9. refY: -10,
  10. refX: 60,
  11. },
  12. },
  13. });

边的配置方法

配置边的方式有三种:实例化图时全局配置,在数据中动态配置,使用 graph.edge(edgeFn) 函数配置。这几种配置方法可以同时使用,优先级:

使用 graph.edge(edgeFn) 配置 > 数据中动态配置 > 实例化图时全局配置

即有相同的配置项时,优先级高的方式将会覆盖优先级低的。

实例化图时全局配置

用户在实例化 Graph 时候可以通过 defaultEdge 配置边,这里的配置是全局的配置,将会在所有边上生效。

  1. const graph = new G6.Graph({
  2. container: 'mountNode',
  3. width: 800,
  4. height: 600,
  5. defaultEdge: {
  6. shape: 'line',
  7. // 其他配置
  8. },
  9. });

在数据中动态配置

如果需要使不同边有不同的配置,可以将配置写入到边数据中。这种配置方式可以通过下面代码的形式直接写入数据,也可以通过遍历数据的方式写入。

  1. const data = {
  2. nodes: [
  3. ... // 节点
  4. ],
  5. edges: [{
  6. source: 'node0',
  7. target: 'node1'
  8. shape: 'polyline',
  9. ... // 其他配置
  10. style: {
  11. ... // 样式属性,每种边的详细样式属性参见各边文档
  12. }
  13. },{
  14. source: 'node1',
  15. target: 'node2'
  16. shape: 'cubic',
  17. ... // 其他配置
  18. style: {
  19. ... // 样式属性,每种边的详细样式属性参见各边文档
  20. }
  21. },
  22. ... // 其他边
  23. ]
  24. }

使用 graph.edge(edgeFn) 配置

该方法可以为不同边进行不同的配置。提示:

  • 该方法必须在 render 之前调用,否则不起作用;
  • 由于该方法优先级最高,将覆盖其他地方对边的配置,这可能将造成一些其他配置不生效的疑惑;
  • 该方法在增加元素、更新元素时会被调用,如果数据量大、每条边上需要更新的内容多时,可能会有性能问题。
  1. // const data = ...
  2. // const graph = ...
  3. graph.edge(edge => {
  4. return {
  5. id: edge.id,
  6. shape: 'polyline',
  7. style: {
  8. fill: 'steelblue',
  9. },
  10. };
  11. });

graph.data(data);graph.render();

  1. ## 实例演示
  2. ```javascript
  3. const data = {
  4. nodes: [
  5. {id: '1', x: 50, y: 50, size: 20},
  6. {id: '2', x: 150, y: 50, size: 20},
  7. {id: '3', x: 200, y: 50, size: 20},
  8. {id: '4', x: 300, y: 130, size: 20},
  9. {id: '5', x: 350, y: 50, size: 20},
  10. {id: '6', x: 450, y: 50, size: 20},
  11. {id: '7', x: 500, y: 50, size: 20},
  12. {id: '8', x: 600, y: 50, size: 20},
  13. {id: '9', x: 650, y: 50, size: 20},
  14. {id: '10', x: 750, y: 50, size: 20},
  15. {id: '11', x: 800, y: 50, size: 20},
  16. {id: '12', x: 900, y: 150, size: 20},
  17. {id: '13', x: 950, y: 50, size: 20},
  18. {id: '14', x: 1050, y: 150, size: 20},
  19. {id: '15', x: 1100, y: 50, size: 20},
  20. ],
  21. edges: [
  22. {source: '1', target: '2', shape: 'line', label: 'line'},
  23. {source: '3', target: '4', shape: 'polyline', label: 'polyline'},
  24. {source: '5', target: '6', shape: 'arc', label: 'arc'},
  25. {source: '7', target: '8', shape: 'quadratic', label: 'quadratic'},
  26. {source: '9', target: '10', shape: 'cubic', label: 'cubic'},
  27. {source: '11', target: '12', shape: 'cubic-vertical', label: 'cubic-vertical'},
  28. {source: '13', target: '14', shape: 'cubic-horizontal', label: 'cubic-horizontal'},
  29. {source: '15', target: '15', shape: 'loop', label: 'loop'}
  30. ]
  31. }
  32. const graph = new G6.Graph({
  33. container: 'mountNode',
  34. width: 1500,
  35. height: 300,
  36. linkCenter: true // 使边连入节点的中心
  37. });
  38. graph.data(data);
  39. graph.render();

显示结果:内置边总览 - 图10

调整边的样式

可以在边上添加文本,修改边的样式。下面演示将配置写入数据的方式配置边。使用下面代码替换上面代码中的 9-10、11-12 两条边数据,修改这两条边的样式和其文本。

  1. // 使 9-10 的 cubic 边文本下移 15 像素
  2. {
  3. source: '9',
  4. target: '10',
  5. shape: 'cubic',
  6. label: 'cubic',
  7. labelCfg: {
  8. refY: -15 // refY 默认是顺时针方向向下,所以需要设置负值
  9. }
  10. },
  11. // 设置 11-12 的 cubic-vertical 边的颜色、虚线、粗细,并设置文本样式、随边旋转
  12. {
  13. source: '11',
  14. target: '12',
  15. shape: 'cubic-vertical',
  16. color: '#722ed1', // 边颜色
  17. size: 5, // 边粗细
  18. style: {
  19. lineDash: [2, 2] // 虚线边
  20. },
  21. label: 'cubic-vertical',
  22. labelCfg: {
  23. position: 'center', // 其实默认就是 center,这里写出来便于理解
  24. autoRotate: true, // 使文本随边旋转
  25. style: {
  26. stroke: 'white', // 给文本添加白边和白色背景
  27. lineWidth: 5, // 文本白边粗细
  28. fill: '#722ed1', // 文本颜色
  29. }
  30. }
  31. }

内置边总览 - 图11

相关阅读