zoukankan      html  css  js  c++  java
  • d3实现的力向导图

      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4     <meta charset="utf-8">
      5     <title>力向导图</title>
      6     <style type="text/css">
      7         .good {
      8             font-size: 10px;
      9         }
     10 
     11         svg {
     12             display: block;
     13             width: 800px;
     14             height: 800px;
     15             margin: 100px auto;
     16         }
     17     </style>
     18     <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
     19 </head>
     20 <body>
     21 <svg></svg>
     22 
     23 <script type="text/javascript">
     24     var nodes = [{name: "桂林"}, {name: "广州"},
     25         {name: "厦门"}, {name: "杭州"},
     26         {name: "上海"}, {name: "青岛"},
     27         {name: "天津"}];
     28 
     29     var edges = [
     30         {source: 0, target: 1}, {source: 0, target: 2},
     31         {source: 0, target: 3}, {source: 0, target: 4},
     32         {source: 0, target: 5}, {source:0, target: 6}];
     33     var force = d3.layout.force()
     34         .nodes(nodes) //指定节点数组
     35         .links(edges) //指定连线数组
     36         .size(['800', '600']) //指定作用域范围
     37         .linkDistance(150) //指定连线长度
     38         .charge([-400]); //相互之间的作用力
     39     force.start()//开始作用;
     40     console.log(nodes)//转换后的数据
     41     console.log(edges)//转换后的数据
     42     var svg = d3.select('svg')
     43     // 绘制连接线
     44     var svg_edges = svg.selectAll('line')
     45         .data(edges)
     46         .enter()
     47         .append('line')
     48         .style('stroke', '#ccc')
     49         .style('stroke-width', 1)
     50     var color = d3.scale.category20()
     51     // 添加节点
     52     var svg_nodes = svg.selectAll('circle')
     53         .data(nodes)
     54         .enter()
     55         .append('circle')
     56         .attr('r', 20)
     57         .style('fill', function (d, i) {
     58             return color(i)
     59         })
     60         .call(force.drag)
     61     //添加描述文字
     62     var svg_texts = svg.selectAll('text')
     63         .data(nodes)
     64         .enter()
     65         .append('text')
     66         .style('fill', 'black')
     67         .attr('dx', 20)
     68         .attr('dy', 8)
     69         .text(function (d) {
     70             return d.name
     71         })
     72     // 力想到图是不断运动的,每一时刻都在发生更新,因此必须不断更新节点和连线的位置
     73     // force里面的tick时间,每进行到一个时刻都要调用它,监听事件写在这里面就好
     74     force.on('tick', function () {
     75         // 更新连线坐标
     76         svg_edges.attr("x1", function (d) {
     77             return d.source.x;
     78         })
     79             .attr("y1", function (d) {
     80                 return d.source.y;
     81             })
     82             .attr("x2", function (d) {
     83                 return d.target.x;
     84             })
     85             .attr("y2", function (d) {
     86                 return d.target.y;
     87             });
     88 
     89         // 更新节点坐标
     90         svg_nodes.attr("cx", function (d) {
     91             return d.x;
     92         })
     93             .attr("cy", function (d) {
     94                 return d.y;
     95             });
     96         // 更新文字坐标
     97         svg_texts.attr("x", function (d) {
     98             return d.x;
     99         })
    100             .attr("y", function (d) {
    101                 return d.y;
    102             });
    103     })
    104 </script>
    105 </body>
    106 </html>
  • 相关阅读:
    这次面试就差不多了,你有什么问题需要问我呢?
    C++为啥要使用new
    C#读取“我的文档”等特殊系统路径及环境变量
    C++11 Lambda表达汇总总结
    c#计算 坐标点与坐标点之间的距离
    eclipse svn同步资源库时忽略某些不需要提交文件类型和文件夹
    通俗理解TCP/IP协议三次握手四次分手流程
    mysql 免安装版 启动服务马上关闭
    MySQL数据库安装与配置详解
    word 插入的图片被嵌套在文字底下
  • 原文地址:https://www.cnblogs.com/yangguoe/p/10309145.html
Copyright © 2011-2022 走看看