92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

3d-force-graph力導向樹(DAG模式)的使用

2021-6-7    前端達人

首先3d-force-graph在碼云或者github直接搜索,它的文檔確實有點少。這個插件用了3次,每一次都有不同的痛苦,也有粗心大意所導致的。

好的,我們現在講解一下這個插件中的導向樹DAG模式

我的案例都會基于Vue開發,創建項目等等我們進不說了,進入正題。

步驟:1.安裝:npm i 3d-force-graph (我安裝的是"3d-force-graph": “^1.67.5”,)
2.導入 import ForceGraph from ‘3d-force-graph’;

首先注意點:
1.不要全部cv我的代碼,或者光放文檔中的代碼,我們要依據后臺數據實際看問題,但是基本的代碼步驟是差不多的,但是也不要全CV,不然你的瀏覽器會報錯,而且你以為錯誤是你的邏輯問題,實際上是cv多了的問題(這一點使我耽誤了半天的時間)
2. 數據處理設計到了遞歸等,數據接口我就不寫了

在模板中定義:

<template>
  <div class="wrap"></div>
</template> 
  • 1
  • 2
  • 3
import ForceGraph from '3d-force-graph'; // 導入 import { subjectList } from '../src/request/api'; // 掉數據的接口 
  • 1
  • 2
 data() { return { // 源數據 sourceData: null, // 力導向圖數據 nodes: [], links: [], ForceGraphData: {} }; }, 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

初始話完成

 async created() { // 獲取數據接口 try { const { data: res } = await subjectList(); this.sourceData = res.data; console.log(this.sourceData); } catch (err) { console.log(err); } this.digui(this.sourceData); // 遞歸處理數據 this.SetForce(); // 調用力導向圖 }, 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

進入數據

methods: { // 1.先定義數據 // 首先定義nodes數據;節點數據 設計遞歸定義方法 digui(data) { data.children.forEach(item => { if (item.children) { this.digui(item); } const nodeObjs = {}; nodeObjs.name = item.name; nodeObjs.id = item.id; nodeObjs.level = item.level; nodeObjs.parent_id = item.parent_id; nodeObjs.has_children = item.has_children; const linksObjs = {}; linksObjs.source = item.parent_id; linksObjs.target = item.id; this.nodes.push(nodeObjs); this.links.push(linksObjs); }); }, 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

后端返回的數據是格式我們需要用遞歸地方法把他們處理在這里插入圖片描述
要知道插件的節點是nodes數據,連線是links數據,links數組中的每一項都有source和target,source的是連線的開始端,target是連線的結束端,source的是parent_id,target的是id,也就是依據數據進行連接,這一不懂的話可以看看這個插件的這個案例
在這里插入圖片描述
好,繼續,處理完的數據是nodes數據后端數據返回的每一項包括children下的每一項,links數據是每一項是的target:id和source:parent_id
處理數據完成,下一部在methods中設置力導向圖的函數

 // 設置力導向圖 SetForce() { // 這里在最想面插入了一條數據是因為后端返還的數據和依據插件的機制需要我在最前面插入一條最起點的數據  //也就是這條數據就是起源,一般來說你們也會在最前面插入一條起源數據,因為后端數據差不多樣式都是一樣的 // 這條數據就不用在添加parent_id了,就是返回的有parent_id,而不需要添加。 this.nodes.unshift({ id: 10515, name: '化學', level: 1, }); this.ForceGraphData.links = this.links; this.ForceGraphData.nodes = this.nodes; const gukergForce = ForceGraph(); gukergForce(document.querySelector('.wrap')) // 力導向圖放在容器中 記住這個容器在樣式中要給大小 .graphData(this.ForceGraphData)// 這條就是數據源 .dagMode('td') // 模式有很多選擇,我選擇的td,自上而下的格式,文檔中有選擇,你們按自己需求選 } }, 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

現在一個簡單的力導向樹就出來了,隨項目的需求你可在節點加圖片,你需要import * as THREE from ‘three’;這個包不用下載,直接導入就可以,

 const gukergForce = ForceGraph(); // 力導向圖放在容器中 gukergForce(document.querySelector('.wrap')) .graphData(this.ForceGraphData) .dagLevelDistance(70) // 兩點直接的距離 .dagMode('td') .nodeResolution(50) // 較高的值產生較光滑的球體。 .nodeThreeObject(node => { .nodeThreeObject(node => { if (node.level === 1) { console.log('你好'); } let imgTexture = ''; if (node.level === 1) { imgTexture = new THREE.TextureLoader().load(require('./assets/1.png')); } else if (node.level === 2) { imgTexture = new THREE.TextureLoader().load(require('./assets/2.png')); } else if (node.level === 3) { imgTexture = new THREE.TextureLoader().load(require('./assets/3.png')); } else if (node.level === 4) { imgTexture = new THREE.TextureLoader().load(require('./assets/4.png')); } else if (node.level === 5) { imgTexture = new THREE.TextureLoader().load(require('./assets/5.png')); } const material = new THREE.SpriteMaterial({ map: imgTexture }); const sprite = new THREE.Sprite(material); if (node.level === 1) { sprite.scale.set(50, 45); return sprite; } else if (node.level === 2) { sprite.scale.set(20, 20); return sprite; } if (node.level === 3) { sprite.scale.set(30, 30); return sprite; } if (node.level === 4) { sprite.scale.set(20, 15); return sprite; } if (node.level === 5) { sprite.scale.set(20, 20); return sprite; } }); } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

其實由誰解決了它節點之間不重復的問題,可以給我留言,謝謝




轉自:csdn論壇

藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

截屏2021-05-13 上午11.41.03.png

  藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服

日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
国产日韩二区| 一本色道久久综合精品竹菊| 日韩电影第一页| 人人超在线公开视频| 久草免费在线观看| 中文字幕高清一区| 亚洲成人教育av| 美女久久久久久| 国内揄拍国内精品久久| av片在线观看网站| caoporn成人| 97人人香蕉| 亚洲va韩国va欧美va精品| 日韩在线欧美| 岛国一区二区在线观看| 国产高清精品一区二区三区| 午夜精品影院| 成人精品一区二区| 国产精品中出一区二区三区| 日韩欧美看国产| 欧美激情视频在线免费观看 欧美视频免费一| 丝袜a∨在线一区二区三区不卡| 黄色网在线播放| 成a人片亚洲日本久久| 91麻豆国产福利在线观看宅福利| 欧美成人女星排行榜| 丝袜美腿亚洲综合| 亚洲精品日产aⅴ| 日本亚洲天堂网| 中文一区一区三区免费在线观看| 91丨九色丨蝌蚪富婆spa| 国产91亚洲精品| 中文字幕亚洲成人| 精品丝袜一区二区三区| 精品亚洲一区二区三区在线播放| 久久影院一区二区三区| 欧美日韩大片| 国产精品999999| 午夜精品免费在线观看| 在线免费观看黄色av| 亚洲少妇最新在线视频| 久久久久久艹| 视频亚洲一区二区| 国产一区二区电影| 欧美videos极品另类| 成人精品一区二区三区四区| 国产一区不卡在线| 国产精品久久久久久久久免费高清| 一级欧洲+日本+国产| 精品freesex老太交| 国内精品久久久久影院色| 欧美精品成人在线| 美女精品视频| 日韩在线欧美在线| 欧美第一黄网免费网站| 欧美大尺度激情区在线播放| 福利在线午夜| 麻豆成人av| 国产成人av一区二区三区| 91精品国产高清久久久久久91裸体| 亚洲成a人v欧美综合天堂麻豆| 精品国产一区二区三区四区vr| 免费精品国产的网站免费观看| 国产成人在线视频播放| 欧美在线色图| 欧美在线视频一区二区三区| 精品久久一区| 中文一区二区在线观看| 亚洲国产cao| 亚洲精品va| 91青青国产在线观看精品| 成人影院在线看| 成人免费在线观看av| 永久免费在线观看视频| 久久精品一级爱片| 久久人人九九| 国产九九精品| 亚洲v日本v欧美v久久精品| 快射视频在线观看| 久久99热精品| 亚洲精品国产第一综合99久久| 国产亚洲欧美日韩精品一区二区三区| 欧美成人中文字幕在线| 色老头一区二区三区| 欧美成人精品一区二区三区在线看| 精品视频一区在线视频| 91精品国产乱码久久久久久| 欧美日韩在线视频免费观看| 成人性视频免费网站| 日韩欧美一区二区在线观看| 91精品国产自产拍在线观看蜜| 黄色网页在线免费观看| 国产精品视频一区二区三区| 国产偷国产偷精品高清尤物| 777久久久精品| 成人影院中文字幕| 99久久99久久精品免费观看| 日韩av综合网| 国产一区二区欧美日韩| 欧美日韩成人黄色| 亚洲免费影视| 欧美日韩亚洲精品内裤| 福利一区福利二区微拍刺激| 欧美精品一区二区三区高清aⅴ| 久久精品网站免费观看| 永久免费毛片在线播放| 日韩毛片在线观看| 亚洲国产精品v| 美女999久久久精品视频| 精品一区二区三区在线| 在线丨暗呦小u女国产精品| 亚洲国产高清在线| 国产精品1234| 浪潮色综合久久天堂| 精品一区二区三区久久| 亚洲美女免费视频| 欧美深夜福利| 91久久国产综合久久91猫猫| 国产成人免费| 欧美成在线观看| 日本女人一区二区三区| 含羞草久久爱69一区| 国产一区二区三区四区| 在线观看av一区二区| 国产精品亚洲综合在线观看| 在线免费av电影| 一本色道久久综合亚洲精品按摩| 中文字幕av一区二区| 成人ww免费完整版在线观看| 欧美日韩免费区域视频在线观看| 欧美96一区二区免费视频| 国产精品一色哟哟哟| 成人免费在线视频网站| 亚洲精品国产欧美| 四虎影院一区二区三区| **性色生活片久久毛片| 97在线看免费观看视频在线观看| 福利视频导航一区| 未满十八勿进黄网站一区不卡| 北条麻妃高清一区| 欧美韩日一区二区三区| 99re视频在线播放| 妖精视频一区二区三区免费观看| sdde在线播放一区二区| 精品美女久久久| 精品日韩av| 成人网页在线观看| 亚洲v欧美v另类v综合v日韩v| 97在线精品国自产拍中文| 精品福利视频一区二区三区| 黄色成人av网站| 91精品视频专区| 在线观看亚洲区| 精品国产18久久久久久二百| 国产二区视频在线观看| 亚洲观看高清完整版在线观看| 95av在线视频| 精品久久久久久久中文字幕| av在线播放成人| 蜜臀久久99精品久久久无需会员| av一本久道久久综合久久鬼色| 久久亚洲春色中文字幕| 精品一区二区三区在线观看| 午夜免费电影一区在线观看|