最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用 vue + d3 畫一棵樹

 更新時(shí)間:2018年12月03日 09:12:54   作者:reclay  
這篇文章主要介紹了如何使用 vue + d3 畫一棵樹,本文通過文字說明加代碼分析的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

github pages

vue 和 d3 的角色

畫圖可分為兩步:

  1. 元素坐標(biāo)計(jì)算
  2. 數(shù)據(jù)綁定

坐標(biāo)計(jì)算只需要一些 api,本文使用 d3。

數(shù)據(jù)綁定既可以借助 d3,也可以使用 vue。d3 通過操作 dom 實(shí)現(xiàn),有點(diǎn)像 jQuery,d3 針對(duì)數(shù)據(jù)和 dom 的狀態(tài)提出了三個(gè)概念:Update、Enter、Exit,感興趣的可以看官網(wǎng)。本文使用 vue 做數(shù)據(jù)綁定

總結(jié):使用 d3 提供的 api 計(jì)算元素坐標(biāo),使用 vue 進(jìn)行數(shù)據(jù)綁定

坐標(biāo)計(jì)算

一棵樹由節(jié)點(diǎn)和連接構(gòu)成,只需要計(jì)算出這兩種元素的坐標(biāo)

即可

畫一棵樹常見的有兩種數(shù)據(jù)結(jié)構(gòu),一種是嵌套的,一種是扁平的。如下:

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

對(duì)于嵌套的數(shù)據(jù),使用 d3.hierarchy() 計(jì)算坐標(biāo),對(duì)于扁平的,使用 d3.stratify()。得到的結(jié)構(gòu)如下(列舉根節(jié)點(diǎn)):

var hierarchyNode = {
 depth: 0
 height: 2

 parent: null
 x: 60
 y: 0,
 data: {
  name: "中國(guó)",
  children: [] 
 },
 children: []
};

得到根節(jié)點(diǎn)后使用 descendants() 獲取所有節(jié)點(diǎn)信息,links() 獲取所有連接信息。節(jié)點(diǎn)的結(jié)構(gòu)如上述,連接結(jié)構(gòu)如下:

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

至此,已獲取到所有元素的坐標(biāo)

數(shù)據(jù)綁定

使用 svg

樹的節(jié)點(diǎn)就是 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

總結(jié)

以上所述是小編給大家介紹的如何使用 vue + d3 畫一棵樹,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

北票市| 广东省| 濮阳县| 广丰县| 富川| 南京市| 乌兰察布市| 山东| 无锡市| 剑川县| 桓仁| 麟游县| 三亚市| 新河县| 杭锦旗| 嵩明县| 富宁县| 万年县| 海伦市| 平罗县| 平武县| 永春县| 孟村| 新和县| 勃利县| 桦南县| 砀山县| 陵川县| 普兰店市| 秭归县| 南丹县| 沂南县| 南皮县| 新巴尔虎右旗| 邻水| 阳江市| 博白县| 上犹县| 永宁县| 兴宁市| 泌阳县|