国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

如何使用 vue + d3 畫一棵樹

2019-11-19 12:25:43
字體:
來源:轉載
供稿:網友

github pages

vue 和 d3 的角色

畫圖可分為兩步:

  1. 元素坐標計算
  2. 數據綁定

坐標計算只需要一些 api,本文使用 d3。

數據綁定既可以借助 d3,也可以使用 vue。d3 通過操作 dom 實現,有點像 jQuery,d3 針對數據和 dom 的狀態提出了三個概念:Update、Enter、Exit,感興趣的可以看官網。本文使用 vue 做數據綁定

總結:使用 d3 提供的 api 計算元素坐標,使用 vue 進行數據綁定

坐標計算

一棵樹由節點和連接構成,只需要計算出這兩種元素的坐標

即可

畫一棵樹常見的有兩種數據結構,一種是嵌套的,一種是扁平的。如下:

// 嵌套的var treeData = { name: '中國', children: [{  name: '北京',  children: [{   name: '海淀'  }, {   name: '朝陽'  }] }, {  name: '上海' }]};// 扁平的var flattenData = [{ name: '中國', parent: ''}, { name: '北京', parent: '中國'}, { name: '上海', parent: '中國'}, { name: '海淀', parent: '北京'}, { name: '朝陽', parent: '北京'}]

對于嵌套的數據,使用 d3.hierarchy() 計算坐標,對于扁平的,使用 d3.stratify()。得到的結構如下(列舉根節點):

var hierarchyNode = { depth: 0 height: 2 parent: null x: 60 y: 0, data: {  name: "中國",  children: []  }, children: []};

得到根節點后使用 descendants() 獲取所有節點信息,links() 獲取所有連接信息。節點的結構如上述,連接結構如下:

var link = { source: Node, target: Node}

至此,已獲取到所有元素的坐標

數據綁定

使用 svg

樹的節點就是 rect + text,如下:

<g :transform="rootTransform"> <rect :width="nodeWidth" :height="nodeHeight" :fill="nodeFill"></rect> <text :fill="nodeTextColor" text-anchor="middle" dominant-baseline="middle"  :y="nodeHeight / 2" :x="nodeWidth / 2">{{node.data.name}}</text></g>

連接就是 path,如下:

<g> <path :d="getLinkPath(link)" :stroke="linkStroke" fill="none" :stroke-width="linkStrokeWidth"></path></g>

code

talk is cheap show me the code

github/vue-d3-tree-example

總結

以上所述是小編給大家介紹的如何使用 vue + d3 畫一棵樹,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普定县| 竹溪县| 息烽县| 昆明市| 上犹县| 山东省| 宣城市| 澎湖县| 古丈县| 罗平县| 新源县| 平泉县| 商水县| 株洲市| 浦东新区| 河南省| 辽宁省| 武义县| 霍城县| 达拉特旗| 会泽县| 天气| 柏乡县| 龙川县| 南华县| 阿拉善左旗| 井研县| 抚顺市| 山西省| 中卫市| 青海省| 尖扎县| 峡江县| 松江区| 荔波县| 浙江省| 渑池县| 文化| 沙湾县| 新河县| 敦煌市|