返回
不甘于平庸:如何巧用g6流程图锚点anchor?
前端
2023-09-28 11:06:33
导语
在使用g6绘制流程图时,锚点anchor作为节点的关键元素,在连接线绘制中发挥着重要的作用。但g6中锚点默认的逼近策略会导致两节点连线最近距离进行绘制。这种策略虽然合理,但有时会与我们的实际需求相悖,比如当我们想要让锚点固定住,以便实现自定义节点时。
锚点的固定
为了让锚点固定住,我们需要避开g6的默认逼近策略。我们可以通过重写锚点anchor的逼近策略来实现这一目的。具体做法如下:
-
在g6的配置项中,找到锚点anchor的配置项。
-
将锚点anchor的逼近策略设置为
null
。 -
保存配置项,即可完成锚点的固定。
自定义节点的实现
当锚点固定住后,我们就可以实现自定义节点了。自定义节点是指根据自己的需求,创建出符合特定业务场景的节点。
-
创建一个新的节点类,并继承自g6的节点基类。
-
在新节点类的构造函数中,调用父类的构造函数,并传入必要的参数。
-
在新节点类的
draw
方法中,重写节点的绘制逻辑,实现自定义节点的绘制。 -
保存节点类,即可完成自定义节点的创建。
实例演示
下面是一个使用g6实现的自定义节点实例。这个自定义节点是一个圆形节点,其中包含一个文本标签。
class CustomNode extends g6.Node {
constructor(cfg) {
super(cfg);
this.initShape();
this.initLabel();
}
initShape() {
this.shape = new g6.Shape.Circle({
style: {
x: this.attr('x'),
y: this.attr('y'),
r: 20,
fill: '#ffffff',
stroke: '#000000',
lineWidth: 1
}
});
this.addShape(this.shape);
}
initLabel() {
this.label = new g6.Text({
style: {
x: this.attr('x'),
y: this.attr('y'),
text: this.attr('label'),
fill: '#000000',
fontSize: 12,
textAlign: 'center',
textBaseline: 'middle'
}
});
this.addShape(this.label);
}
}
// 使用自定义节点
const graph = new g6.Graph({
container: 'mountNode',
width: 500,
height: 500
});
graph.addNode(new CustomNode({
id: 'node1',
x: 100,
y: 100,
label: 'Node 1'
}));
graph.render();
结语
通过重写锚点anchor的逼近策略,我们可以实现锚点的固定。当锚点固定住后,我们就可以实现自定义节点了。自定义节点可以根据自己的需求,创建出符合特定业务场景的节点。这极大地提高了g6流程图的可定制性和灵活性,使其能够满足更多用户的需求。