本章介绍的内容将在3.0.8版本中发布。
草稿文档
定义节点时设定
在自定义节点时,通过options字段指定各个状态下的样式及属性值,需要特别说明的一点是,除默认状态外,其他状态是对keyShape起作用。
// 带有图标的圆,可用于拓扑图中G6.registerNode('circleIcon', {// 自定义节点时的配置options: {// 默认配置default: {r: 20,fill: '#40a9ff',stroke: '#91d5ff',lineWidth: 1,x: 0,y: 0,// 文本样式配置labelCfg: {style: {fill: '#595959'}},// 节点中icon配置icon: {// 是否显示icon,值为 false 则不渲染iconshow: true,// icon的地址,可以是字符串或Imageimg: Icon,width: 16,height: 16}},// 鼠标hover状态下的配置hover: {lineWidth: 3},// 选中节点状态下的配置select: {lineWidth: 5}},// 文本位置labelPosition: 'bottom',drawLabel(cfg, group) {const customStyle = this.getCustomConfig(cfg) || {};const defaultConfig = customStyle.default || {};const labelCfg = deepMix({}, this.options.default.labelCfg, defaultConfig.labelCfg, cfg.labelCfg);const labelStyle = this.getLabelStyle(cfg, labelCfg, group);const label = group.addShape('text', {attrs: labelStyle});return label;},drawShape(cfg, group) {const customStyle = this.getCustomConfig(cfg) || {};const defaultConfig = customStyle.default;// const { icon, ...circleStyle } = defaultConfig;const attrs = deepMix({}, this.options.default, defaultConfig, cfg.style);const keyShape = group.addShape('circle', {attrs});const { icon } = attrs;const { width, height } = icon;const image = group.addShape('image', {attrs: {x: -width / 2,y: -height / 2,...icon}});image.set('capture', false);return keyShape;}}, 'circle');
默认效果
触发各状态
通过上面的方式定义完节点以后,如果要触发这个状态,则只需要通过以下方式即可:
graph.on('node:mouseenter', evt => {const { item } = evtgraph.setItemState(item, 'hover', true)})graph.on('node:mouseleave', evt => {const { item } = evtgraph.setItemState(item, 'hover', false)})
重点说明 自定义节点或基于内置节点修改时,配置各个状态下的样式,然后根据具体业务执行graph.setItemState(item, 'stateName', true)即可。
**
扩展内置节点
当内置的节点不能满足需求时,可以通过getCustomConfig()或getStateStyle()方法实现。
基于内置节点circleIcon来扩展。
G6.registerNode('shadowCircle', {getCustomConfig() {return {default: {shadowOffsetX: 0,shadowOffsetY: 0,shadowBlur: 10,shadowColor: '#e6f7ff',lineWidth: 5,icon: {show: false}}}}}, 'circleIcon')G6.registerNode('stateCircle', {getStateStyle(name, value, item) {// 这里可以根据item判断,返回不同类型的stylereturn {fill: 'green',stroke: '#000',lineWidth: 5}}}, 'circleIcon')
从默认效果扩展出来的效果:
- node2:改变circle大小、颜色、icon大小及文本颜色;
- node3:改变circle的背景色,不显示icon。

node4为默认效果,5-9为扩展出来的效果。
