D3 彻底不须要经过力导向图来处理拓扑数据

http://codepen.io/jingxiao/pe...node

https://bl.ocks.org/mbostock/...
哎,其实彻底能够不用力导向图布局来处理拓扑图的,力导向图来处理也并不合适。
以前只是使用力导向图来初始化获得能够绘制的链路数据,节点数据是原始数据,经过力导向图布局也并无作处理。布局

可是这组数据,彻底能够本身处理,使用力导向图体现了“力”的相互做用,因此初始化也会有冷却时间,引入了tick事件,这个事件包含了拓扑全部元素的坐标更新,这个事件就是在冷却时间间隔不断去触发绘制。当一个节点进行拖拽的时候,也会触发这个事件。可是这个事件会更新全部元素,这样并很差。spa

而实际上,拓扑节点拖拽没必要要调用tick事件引起全部元素坐标位置更新,基本上就拖拽节点和相关链路的坐标位置有更新。
初始化数据code

var nodes = [{
        "id": 1,
        "ip": "1.1.1.1",
        "r": 20,
        "x": 200,
        "y": 300
    }, {
        "id": 2,
        "ip": "1.1.1.2",
        "r": 30,
        "x": 300,
        "y": 300
    }, {
        "id": 3,
        "ip": "1.1.1.3",
        "r": 15,
        "x": 450,
        "y": 200
    }, {
        "id": 4,
        "ip": "1.1.1.4",
        "r": 20,
        "x": 450,
        "y": 400
    }];
    var links = [{
        "source": 1,
        "target": 2
    }, {
        "source": 2,
        "target": 3
    }, {
        "source": 2,
        "target": 4
    }];
    
    // 数据转换
    links.some(function(v, i) {
        nodes.some(function(w, j) {
            if (v.source == w.id) {
                v.source = w;
            }
            if (v.target == w.id) {
                v.target = w;
            }
        });
        v.index = ++i;
    });

处理(能够经过力导向图或者本身处理就行)获得数据主要是链路可绘制坐标事件

clipboard.png

一开始觉得,力导向图链路获得的链路数据,会随着节点数据位置变化而更新。一开始觉得这个功能是力导向图缘由实现的关系。后来发现,这彻底是引用数据类型的缘由。ip

恩,不用力导向图了。get

相关文章
相关标签/搜索