簡介
這是一個純粹的演算法,本身不提供繪圖功能,可是,基於此演算法你可以非常容易的完成各種樹圖的繪製。
本演算法本身是平臺無關的,可以在所有支援JS和TS的環境中使用,包括H5、各種小程式、uni-app等。
溫馨提示:使用中如果遇到任何問題,都可以點選此處給我們提Issue。
引入
你需要執行下面的安裝命令:
npm install --save jsdoor
然後在需要使用地方引入:
import treeLayout from 'jsdoor/treeLayout/index.js';
建立計算物件
此演算法是用於計算一個樹結構的座標的方法,傳遞配置config就可以獲取樹物件例項:
var treeObj=treeLayout(config);
配置資料結構
config是一個鍵值對格式的配置json,由於原始資料格式不一定,你需要傳遞資料格式的配置:
- "root":function(initTree){ /返回根結點/ }
- "id":function(treedata){ /返回id/ }
- "child":function(parentTree, initTree){ /返回孩子結點/ }
溫馨提示:另外,你還可以透過tree.root()、tree.id()和tree.child()方法,隨時調整配置。
使用物件計算
現在傳遞資料data進行計算即可:
var resultData=treeObj(data);
返回的資料結構
resultData是計算後帶有結點座標的資料,格式如下:
{node: {
"XXX":{
children: []
data: any
id: string||number
left: number
pid: any
top: number
},
...
}, root: string||number, size: number, deep: number}
node記錄的是每個結點的資訊,每個結點中的left和top就是該結點應該繪製的位置,data是結點的原始資料。
可能你已經發現了,樹圖分為很多種(圓形樹,倒樹等),上面並沒有配置這些資訊,是的,因為可能的樹圖無法預測,我們這裡選擇了一種最簡單的模型,方便具體使用的時候可以在此基礎上快速開發。
這是一棵從左到右,根節點位於左中心,每個節點位於一個1x1的正方形中心的單元樹。
比如上圖結點『油畫』的資料如下:
"油畫":{
children: [];
data: (2) ["油畫", "手繪"];
id: "油畫";
left: 1.5;
pid: "手繪";
top: 1.5
}