d3.js 轮状树图,有折叠展开

   参考网上的例子  从新实现了下轮状树图:  

   <script type="text/javascript" src="src/lib/d3.min.js"></script>
      <script type="text/javascript" src="src/lib/d3.layout.js"></script> 

核心代码:

export default{
//初始化轮状图
initlun:function(classpath,data){
   
    var width = document.body.clientWidth;
    var height = document.body.clientHeight-65;
             //图像区域大小
     var R = 600;
     //动画持续时间
     var duration=1000;
     //节点编号
     var index=0;
      
     //定义一个Tree对象,定义旋转角度和最大半径
     var tree = d3.layout.tree()
     .size([360,R/2-120])
     .separation(function(a,b) { return (a.parent == b.parent ? 1 : 2)/a.depth;});
      
     //定义布局方向
     var diagonal = d3.svg.diagonal()
     .projection(function(d) {
     var r = d.y, a = (d.x-90) / 180 * Math.PI;
     return [r * Math.cos(a), r * Math.sin(a)];
     });
      
     //新建画布,移动到圆心位置
     var svg = d3.select(classpath).append("svg")
     .attr("width", width)
     .attr("height", height)
     .append("g")
     .attr("transform", function(d){ return "translate("+R/2+"," + R/2 + ")";});
      
     //根据JSON数据生成树
/*     d3.json("treeDataC.php", function(error, data) {*/
      
     var root=data;
      
     //根据数据生成nodes集合
     var nodes = tree.nodes(data);
      
     //记录现在的位置
     nodes.forEach(function(d){
     d.x0 = d.x;
     d.y0 = d.y;
     });
      
     //获取node集合的关系集合
     var links = tree.links(nodes);
      
     //根据node集合生成节点,添加id是为了区分是否冗余的节点
     var node = svg.selectAll(".node")
     .data(nodes,function(d){return d.id|| (d.id = ++index);});
      
     //为关系集合设置贝塞尔曲线连接
     var link=svg.selectAll(".link")
     .data(links, function(d) { return d.target.id;})
     .enter()
     .append("path")
     .attr("class", "link")
     .attr("d",diagonal);
      
     node.enter()
     .append("g")
     .attr("class", "node")
     .attr("transform",function(d){return "rotate(" + (d.x-90) + ")translate(" + d.y + ")"; })
     .on("click",nodeClick);
      
     //为节点添加圆形标记,如果有子节点为红色,否则绿色
     node.append("circle")
     .attr("fill",function(d){return d.children==null?"#0F0":"#F00";})
     .attr("r", 5);
      
     //为节点添加说明文字
     node.append("text")
     .attr("dy", ".4em")
     .text(function(d){return d.level;})
     .attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
     .attr("transform", function(d) { return d.x < 180 ? "translate(8)" : "rotate(180)translate(-8)"; });
      
     //点击的话,隐藏或者显示子节点
     function nodeClick(d)
     {
     if (d.children)
     {
     d._children = d.children;
     d.children = null;
     }
     else
     {
     d.children = d._children;
     d._children = null;
     }
     update(d);
     }
      
     //更新显示
     function update(source)
     {
     //取得现有的节点数据,因为设置了Children属性,没有Children的节点将被删除
     var nodes = tree.nodes(root).reverse();
     var links = tree.links(nodes);
      
     //为节点更新数据
     var node = svg.selectAll("g.node")
     .data(nodes,function(d){return d.id|| (d.id = ++index);});
      
     //为链接更新数据
     var link = svg.selectAll("path.link").data(links, function(d) {return d.target.id;});
      
     //更新链接
     link.enter()
     .append("path")
     .attr("class", "link")
     .attr("d", function(d) {
     var o = {x: source.x, y: source.y};
     return diagonal({source: o, target: o});
     });
      
     link.transition()
     .duration(duration)
     .attr("d",diagonal);
      
     //移除无用的链接
     link.exit()
     .transition()
     .duration(duration)
     .attr("d", function(d) {
     var o = {x: source.x, y: source.y};
     return diagonal({source: o, target: o});
     })
     .remove();
      
     //更新节点集合
     var nodeEnter = node.enter()
     .append("g")
     .attr("class", "node")
     .attr("transform",function(d){return "rotate(" + (source.x0-90) + ")translate(" + source.y0 + ")"; })
     .on("click",nodeClick);
      
     //为节点添加圆形标记,如果有子节点为红色,否则绿色
     node.append("circle")
     .attr("fill",function(d){return d.children==null && d._children==null?"#0F0":"#F00";})
     .attr("r", 5);
      
     //为节点添加说明文字
     node.append("text")
     .attr("dy", ".4em")
     .text(function(d){return d.level;})
     .attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
     .attr("transform", function(d) { return d.x < 180 ? "translate(8)" : "rotate(180)translate(-8)"; });
      
     //节点动画
     var nodeUpdate = node.transition()
     .duration(duration)
     .attr("transform", function(d) { return "rotate(" + (d.x-90) + ")translate(" + d.y + ")"; });
      
     //将无用的子节点删除
     var nodeExit =node.exit()
     .transition()
     .duration(duration)
     .attr("transform", function(d){return "rotate(" + (source.x-90) + ")translate(" + source.y + ")"; })
     .remove();
      
     //记录下当前位置,为下次动画记录初始值
     nodes.forEach(function(d) {
     d.x0 = d.x;
     d.y0 = d.y;
     });
     }
     /*});*/
}
}

数据结构:

{"code":"200","data":{"id":"282613","level":0,"name":"北京神州泰岳软件股份有限公司","isparent":false,"size":0,"close":false,"children":[{"id":null,"level":1,"name":"高管信息","isparent":false,"size":921,"close":false,"children":[{"id":null,"level":2,"name":"丁彦超-监事","isparent":false,"size":197,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"郝岩-监事","isparent":false,"size":36,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"徐斯平-董事","isparent":false,"size":908,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"李力-总经理","isparent":false,"size":283,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"黄松浪-副董事长","isparent":false,"size":904,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"李力-董事","isparent":false,"size":660,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"李广刚-监事会主席","isparent":false,"size":386,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"王雪春-独立董事","isparent":false,"size":96,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"冒大卫-董事","isparent":false,"size":109,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"杨凯程-董事","isparent":false,"size":556,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"沈阳-独立董事","isparent":false,"size":92,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"王宁-董事长","isparent":false,"size":479,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"罗建北-独立董事","isparent":false,"size":615,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"刘铁民-独立董事","isparent":false,"size":490,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"翟一兵-董事","isparent":false,"size":871,"close":false,"children":null,"parents":null}],"parents":null},{"id":null,"level":1,"name":"企业对外投资","isparent":false,"size":801,"close":false,"children":[{"id":null,"level":2,"name":"安徽省泰岳祥升软件有限公司","isparent":false,"size":273,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"宁波普天通信技术有限公司","isparent":false,"size":943,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰岳通信技术有限公司","isparent":false,"size":679,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京新媒传信科技有限公司","isparent":false,"size":884,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京广通神州网络技术有限公司","isparent":false,"size":480,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京互联时代通讯科技有限公司","isparent":false,"size":250,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰岳智能数据技术有限公司","isparent":false,"size":568,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京融聚世界网络科技有限公司","isparent":false,"size":956,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州智核信息技术有限公司","isparent":false,"size":897,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京慧联神州科技有限公司","isparent":false,"size":716,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"深圳市前海泰岳梧桐投资基金管理有限公司","isparent":false,"size":611,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京华泰德丰技术有限公司","isparent":false,"size":507,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"奇点新源国际技术开发(北京)有限公司","isparent":false,"size":53,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"珠海神州泰岳投资管理有限公司","isparent":false,"size":420,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州良品电子商务科技股份有限公司","isparent":false,"size":356,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"珠海泰岳梧桐投资管理有限公司","isparent":false,"size":444,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"宁波泰岳梧桐投资管理有限公司","isparent":false,"size":595,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"宁波普金通信设备有限公司","isparent":false,"size":575,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京玄一科技有限公司","isparent":false,"size":569,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"广州泰岳指咚软件技术有限公司","isparent":false,"size":360,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京帝派智能科技有限公司","isparent":false,"size":399,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"广东中科白云投资管理有限公司","isparent":false,"size":261,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州云联科技有限公司","isparent":false,"size":88,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"大连华信计算机技术股份有限公司","isparent":false,"size":319,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"天津壳木软件有限责任公司","isparent":false,"size":710,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"重庆新媒农信科技有限公司","isparent":false,"size":793,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"蓝鸥科技有限公司","isparent":false,"size":576,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"泰岳金服(北京)科技有限公司","isparent":false,"size":288,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"杭州莱投投资管理合伙企业(有限合伙)","isparent":false,"size":707,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"杭州爱财网络科技有限公司","isparent":false,"size":249,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"成都斯沃茨科技有限公司","isparent":false,"size":870,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"天津泰岳小漫科技有限公司","isparent":false,"size":207,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州祥升软件有限公司","isparent":false,"size":669,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰核物联网技术有限公司","isparent":false,"size":464,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰岳良品电子商务有限公司","isparent":false,"size":358,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰岳系统集成有限公司","isparent":false,"size":791,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰岳教育科技有限公司","isparent":false,"size":980,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰岳信息安全技术有限公司","isparent":false,"size":322,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京润佳华商创新投资管理中心(有限合伙)","isparent":false,"size":567,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京润佳华商创新投资管理中心","isparent":false,"size":293,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京泰岳阳光科技有限公司","isparent":false,"size":766,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京泰岳睿安科技有限公司","isparent":false,"size":332,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京泰岳树人科技有限公司","isparent":false,"size":703,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京创金兴业投资中心(有限合伙)","isparent":false,"size":850,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京创金兴业投资中心","isparent":false,"size":851,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京云中融信网络科技有限公司","isparent":false,"size":268,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"中科鼎富(北京)科技发展有限公司","isparent":false,"size":391,"close":false,"children":null,"parents":null}],"parents":null},{"id":null,"level":1,"name":"法人对外投资","isparent":false,"size":554,"close":false,"children":[],"parents":null},{"id":null,"level":1,"name":"法人对外任职","isparent":false,"size":87,"close":false,"children":[],"parents":null},{"id":null,"level":1,"name":"股东信息","isparent":false,"size":137,"close":false,"children":[{"id":null,"level":2,"name":"李力","isparent":false,"size":309,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"王宁","isparent":false,"size":23,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"齐强","isparent":false,"size":828,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"黄松浪","isparent":false,"size":843,"close":false,"children":null,"parents":null}],"parents":null},{"id":null,"level":1,"name":"分支机构","isparent":false,"size":683,"close":false,"children":[{"id":null,"level":2,"name":"北京神州泰岳软件股份有限公司网络技术分公司","isparent":false,"size":109,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰岳软件股份有限公司正启分公司","isparent":false,"size":465,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰岳软件股份有限公司朝阳分公司","isparent":false,"size":707,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰岳软件股份有限公司广州分公司","isparent":false,"size":854,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰岳软件股份有限公司信息技术分公司","isparent":false,"size":341,"close":false,"children":null,"parents":null},{"id":null,"level":2,"name":"北京神州泰岳软件股份有限公司上海分公司","isparent":false,"size":515,"close":false,"children":null,"parents":null}],"parents":null}],"parents":null},"desc":"查询成功"}

猜你喜欢

转载自blog.csdn.net/qq_26562641/article/details/81315393