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

相關文章
相關標籤/搜索