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; });
處理(能夠經過力導向圖或者本身處理就行)獲得數據主要是鏈路可繪製座標事件
一開始覺得,力導向圖鏈路獲得的鏈路數據,會隨着節點數據位置變化而更新。一開始覺得這個功能是力導向圖緣由實現的關係。後來發現,這徹底是引用數據類型的緣由。ip
恩,不用力導向圖了。get