前言
最近工作需要完成一个股权穿透图,找了好多文档发现都不满足需求,最终选择d3.js来实现,包含子集的收缩展开,交互以及其他功能。之前由于没做过类似关系图以及不了解d3,踩了很多坑,我会尽可能将代码描述清楚(毕竟花了两个大夜),建议提前了解svg的简单使用和运行机制,d3的基本使用。
使用d3不像其他图表,d3的使用自由度极大,因此可以完成绝大多数图表需求,时间充足的话,可以逐步完成代码,理解实现思路后做其他修改就很简单了。话不多说,先贴图。
我尽可能简化了代码,主要看实现思路,后续增加或删减功能在此基础上都算方便。
我会将源码贴出来,可以直接使用。记录一下我遇到的坑。
配置方法
getTreeConfig方法里包含内部需要配置项,可以调整数值查看效果。
getTreeConfig() {
let treeConfig = {
margin: {
top: 10, right: 5, bottom: 0, left: 30}}
treeConfig.chartWidth = this.d3.select('#svgWrap')[0][0].clientWidth;
treeConfig.chartHeight = this.d3.select('#svgWrap')[0][0].clientHeight;
treeConfig.centralHeight = treeConfig.chartHeight / 2;
treeConfig.centralWidth = treeConfig.chartWidth / 2;</