最近有读者问,关系图如何通过点击节点展开、折叠,当时没有时间写例子(最近一直比较忙),就口述了下思路……
昨晚终于抽出点时间做了一个极其简易的示例,补上。
思路
思路就是利用自带的图例动作(显示/隐藏)实现。
实现
一、首先准备些数据:
1、关系图的节点数据 data
2、节点间关系数据 links
3、用于图例的 categories 类目名称列表 categories
4、一个用于记录节点显示/隐藏状态的 categoryStatus
二、准备配置项 option
option = {
title: {
text: '关系图点击节点展开次级节点效果尝试'
},
tooltip: {},
legend: {
show: false,
y: '8%',
data: categories
},
animationDuration: 1500,
animationEasingUpdate: 'quinticInOut',
series: [{
name: 'ECharts学习',
type: 'graph',
layout: 'none',
data: data,
links: links,
categories: categories.map(function(a) {
return {
name: a
};
}),
roam: true,
focusNodeAdjacency: true,
itemStyle: {
normal: {
borderColor: '#fff',
borderWidth: 1,
shadowBlur: 10,
shadowColor: 'rgba(0, 0, 0, 0.3)'
}
},
label: {
position: 'right',
formatter: '{b}'
},
lineStyle: {
color: 'source',
curveness: 0.3
},
emphasis: {
lineStyle: {
width: 10
}
}
}]
};
三、最主要的部分:监听鼠标事件、操作图表行为
myChart.on('click', function(params) {
categoryName = params.name + '_childrens';
// 如果 category 状态为显示,则通过一定规则隐藏所有 childres
if (categoryStatus[categoryName]) {
// 这里为了省事,直接通过字符串匹配判断了
for (let i in categories) {
if (categories[i].includes(params.name) && categories[i] != 'node0') {
myChart.dispatchAction({
type: 'legendUnSelect',
// 图例名称
name: categories[i]
});
}
}
categoryStatus[categoryName] = false;
// 如 category 状态为隐藏,则显示
} else {
for (let i in categories) {
if (categories[i].includes(params.name) && categoryStatus[categories[i]] || categories[i] === categoryName) {
myChart.dispatchAction({
type: 'legendSelect',
// 图例名称
name: categories[i]
});
}
}
categoryStatus[categoryName] = true;
}
});
本文分享自 ZXand618的ECharts之旅 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!