效果预览:
效果实现:
通过动态添加curveness即可实现 关系图两个节点同向的多条边,但发现layout为circular时,当仅有两个节点时,两条线会重合成直线,针对这个情况我们添加个判定把layout改为none并给两个节点赋上坐标,代码如下:
// 找source、target相同的数组的下标放到一个数组arr内,附上lineStyle,然后curveness按0.1、-0.1、0.2、-0.2...的顺序排列
var arr = []
for (let k=0; k<links.length; k++) {
for (let l=k+1; l<links.length; l++) {
if (links[k].source === links[l].source && links[k].target === links[l].target) {
if (arr.indexOf(k) === -1) {
arr.push(k)
}
if (arr.indexOf(l) === -1) {
arr.push(l)
}
}
}
}
var curveness = 0
var num
var layout = 'circular'
for (num of arr) {
relations[num].lineStyle = {}
if (curveness > 0) {
curveness = -curveness
} else if (curveness <= 0) {
curveness = -curveness + 0.1
}
// 判断当节点只有两个的时候,把layout改成none,并定义x,y
if (data.length === 2) {
data[0].x = 500
data[0].y = 300
data[1].x = 600
data[1].y = 300
layout = 'none'
}
relations[num].lineStyle.curveness = curveness
}