zoukankan      html  css  js  c++  java
  • D3官网上的力导图

    D3 官网上的力导图整理

    其代码:

    /* 
     * @Author: Administrator
     * @Date:   2015-11-18 15:45:55
     * @Last Modified by:   Administrator
     * @Last Modified time: 2015-11-27 11:49:48
     */
    
    'use strict';
    
    var forceTree = function(setting) {
    
        d3.select(setting.selector).selectAll('svg').remove()
        var selector = setting.selector,
            tempSeries = setting.series,
            series = setting.series,
            w = document.querySelector(selector).getBoundingClientRect().width * 0.9,
            h = document.querySelector(selector).getBoundingClientRect().height * 0.9,
            node,
            link,
            root
         
        var force = d3.layout.force()
            .on("tick", tick)
            .charge(function(d) {
    
                return d.children ? -d.size / 100 : -300;
            })
            /*  .linkDistance(function(d) {
         
                 return d.children ? 1000 : 30;
             })*/
            .size([w, h - 320])
    
        var vis = d3.select(selector).append("svg:svg")
            .attr("width", w)
            .attr("height", h)
    
        // start it 
    
        root = series
    
        startRoot(root)
    
        function startRoot(root) {
    
            root.fixed = true
            root.x = w / 2
            root.y = h / 2 + 100
            update()
    
        }
    
        function update() {
    
            d3.selectAll('line').remove()
            d3.selectAll('circle').remove()
    
            var nodes = flatten(root),
                links = d3.layout.tree().links(nodes)
    
            // Restart the force layout.
            force
                .nodes(nodes)
                .links(links)
                .start()
    
            // Update the links…
            link = vis.selectAll("line.link")
                .data(links, function(d) {
                    return d.target.id
                })
    
            // Enter any new links.
            link.enter().insert("svg:line", ".node")
                .attr("class", "link")
                .attr("x1", function(d) {
                    return d.source.x
                })
                .attr('stroke','#fff')
                .attr("y1", function(d) {
                    return d.source.y
                })
                .attr("x2", function(d) {
                    return d.target.x
                })
                .attr("y2", function(d) {
                    return d.target.y
                })
    
            // Exit any old links.
            link.exit().remove();
    
            // Update the nodes…
            node = vis.selectAll("circle.node")
                .data(nodes, function(d) {
                    return d.id
                })
                .style("fill", 'green');
    
            node.transition()
                .attr("r", function(d) {
    
                    return 10
                })
    
            // Enter any new nodes.
            node.enter().append("svg:circle")
                .attr("class", "node")
                .attr("cx", function(d) {
                    return d.x
                })
                .attr("cy", function(d) {
                    return d.y
                })
                .attr("r", function(d) {
    
                    if (d.type === 'project') {
    
                        return 15
                    } else if (d.type === 'company') {
                        return 10
                    } else {
                        return 5
                    }
                })
                .style("fill", function(d, i) {
    
                    if (d.type === 'project') {
    
                        return 'red'
                    } else if (d.type === 'company') {
                        return 'green'
                    } else {
                        return 'pink'
                    }
    
                })
                .attr('class', function(d, i) {
    
                    $(this).data('info', d)
                    return 'circle #circle' + d.index
                })
                .on("click.first", click)
                .on('click.second', createChild)
                .call(force.drag)
    
            node.exit().remove()
        }
    
        function tick() {
            link.attr("x1", function(d) {
                    return d.source.x;
                })
                .attr("y1", function(d) {
                    return d.source.y;
                })
                .attr("x2", function(d) {
                    return d.target.x;
                })
                .attr("y2", function(d) {
                    return d.target.y;
                });
    
            node.attr("cx", function(d) {
                    return d.x;
                })
                .attr("cy", function(d) {
                    return d.y;
                });
        }
    
    
        function click(d) {
            if (d.children) {
                d._children = d.children;
                d.children = null;
            } else {
                d.children = d._children;
                d._children = null;
            }
            update()
        }
    
        function flatten(root) {
    
            var nodes = [],
                i = 0;
    
            function recurse(node) {
    
                if (node.children) node.size = node.children.reduce(function(p, v) {
                    return p + recurse(v);
                }, 0);
    
                if (!node.id) node.id = ++i;
                nodes.push(node);
                return node.size;
            }
    
            root.size = recurse(root);
            return nodes;
        }
    
        function createChild(d) {
    
          /*  $.ajax({
                url: 'data/flare2.json',
                type: 'GET',
                dataType: 'json',
                success: function(data) {
    
                }
            })*/
        }
        // end createChild
    }
  • 相关阅读:
    关于C#调用VC SDK小结
    失业日志:2009年10月15日 猫 老鼠 人(一)
    闲聊日志 一:
    按编号分类的树
    不知不觉又用到了VC6
    这个问题很郁闷.net mvc,也可能我不知道
    失业日志:2008年10月13日
    失业日志:2009年10月16日 能回忆多少就写多少
    失业日志:2009年10月12日星期一
    失业日志 200910月22日
  • 原文地址:https://www.cnblogs.com/wypeng/p/5000223.html
Copyright © 2011-2022 走看看