GoJs節(jié)點(diǎn)繪圖模板之go.Node使用示例詳解
前言
介紹了很多的節(jié)點(diǎn)內(nèi)的繪圖模板,包括go.TextBlock
(文字)、go.Shape
(幾何圖形)、go.Picture
(圖片)。還有這些元素的包裹面板go.Panel
?,F(xiàn)在我們來介紹一下整個節(jié)點(diǎn)的繪圖模板go.Node
的一些特性。
go.Node的使用
結(jié)合前面的繪圖模板
在使用go.Node
的時候,我們需要用到實(shí)例上的配置項(xiàng)nodeTemplate
來進(jìn)行對應(yīng)的配置,因?yàn)?code>go.Node是繼承了go.Panel
類。所以上節(jié)中說的go.Panel
中的類型在go.Node
中也可以選擇使用。
import caopi from "../../assets/caopi.jpeg" import liubei from "../../assets/liubei.jpg" import sunquan from "../../assets/sunquan.jpeg" //data nodes: [ { key: "1", text: "三國人物志", desc:"滾滾長江東逝水,浪花淘盡英雄" }, { key: "1-1", text: "曹魏", desc:"三國時期割據(jù)政權(quán)之一,后世史家多稱曹魏" }, { key: "1-1-1", text: "曹丕", source:caopi, desc:"字子桓,曹魏開國皇帝" }, { key: "1-2", text: "蜀漢", desc:"三國時期割據(jù)政權(quán)之一,后世史家多稱蜀漢" }, { key: "1-2-1", text: "劉備", source:liubei, desc:"字玄德,三國時期蜀漢開國皇帝" }, { key: "1-3", text: "孫吳", desc:"三國時期割據(jù)政權(quán)之一,后世史家多稱孫吳" }, { key: "1-3-1", text: "孫權(quán)", source:sunquan, desc:"字仲謀,三國時期孫吳開國皇帝" }, ], links: [ { from: "1", to: "1-1", }, { from: "1-1", to: "1-1-1", }, { from: "1", to: "1-2", }, { from: "1-2", to: "1-2-1", }, { from: "1-3", to: "1-3-1", }, { from: "1", to: "1-3", }, ], //methods this.myDiagram.nodeTemplate = $$( go.Node, "Horizontal", $$(go.Panel,"Auto", $$(go.Shape,"RoundedRectangle", { desiredSize: new go.Size(120, 80),//設(shè)置圖形的尺寸 strokeWidth: 1,//設(shè)置邊框的寬度 parameter1: 3,//設(shè)置圖形的圓角 fill:null,//設(shè)置內(nèi)部填充的顏色 stroke:"#67B73C"http://設(shè)置邊框的顏色 }, ), $$(go.Panel,"Table",{desiredSize: new go.Size(120, 80)}, $$(go.TextBlock,{row:0,column: 0,alignment: go.Spot.Top,margin:5,font: "bold 14px sans-serif ",stroke:"#FF0000"},new go.Binding("text")), $$(go.TextBlock,{row:1,column: 0,alignment: go.Spot.Left,desiredSize: new go.Size(70, 50),stroke:"#FF9900"},new go.Binding("text","desc")), $$(go.Picture,{ row:0,column: 1,rowSpan:2,desiredSize: new go.Size(50, 50) },new go.Binding("source")), ) ), );
對節(jié)點(diǎn)內(nèi)部進(jìn)行簡單的元素添加之后,就可以看到上圖中顯示的這樣,有一個title顯示在上面,在下面對內(nèi)容進(jìn)行一個描述,而右側(cè)則是添加了對節(jié)點(diǎn)內(nèi)容表現(xiàn)的圖片,這里放圖片一般都是一個簡單的縮略圖,如果需求中需要看對應(yīng)的大圖的話,也可以通過圖片的點(diǎn)擊事件結(jié)合模態(tài)框進(jìn)行顯示。節(jié)點(diǎn)內(nèi)部的顯示內(nèi)容也可以根據(jù)需求進(jìn)行個性化的搭配和布局。
對go.Node使用進(jìn)行一些個性化定制拓展
根據(jù)上面圖形的顯示,只有第三級的具體任務(wù)才有圖片,但是前面兩個節(jié)點(diǎn)還是對圖片的位置進(jìn)行了留白,或者說需求希望不同的層級顯示不同的節(jié)點(diǎn)邊框顏色。這個時候我們還可以根據(jù)屬性設(shè)置回調(diào)函數(shù),這樣更加方便我們根據(jù)不同的要求顯示不同的節(jié)點(diǎn),而不是把所有的節(jié)點(diǎn)都顯示成一種樣式。我們可以稍作調(diào)整,通過new go.Binding()
來進(jìn)行屬性配置
$$(go.Shape,"RoundedRectangle", { desiredSize: new go.Size(120, 80),//設(shè)置圖形的尺寸 strokeWidth: 1,//設(shè)置邊框的寬度 parameter1: 3,//設(shè)置圖形的圓角 fill:null,//設(shè)置內(nèi)部填充的顏色 stroke:"#67B73C"http://設(shè)置邊框的顏色 }, new go.Binding("stroke", "key", this.strokeSetting)//新增部分 ), $$(go.Panel,"Table",{desiredSize: new go.Size(120, 80)}, $$(go.TextBlock,{row:0,column: 0,alignment: go.Spot.Top,margin:5,font: "bold 14px sans-serif ",stroke:"#FF0000"},new go.Binding("text")), $$(go.TextBlock,{row:1,column: 0,alignment: go.Spot.Left,stroke:"#FF9900",overflow: go.TextBlock.OverflowEllipsis,maxLines: 2,},new go.Binding("text","desc"),new go.Binding("desiredSize", "key", this.descDesiredSize)//新增部分), $$(go.Picture,{ row:0,column: 1,rowSpan:2,desiredSize: new go.Size(50, 50) },new go.Binding("source"),new go.Binding("visible", "key", this.pictureVisible)//新增部分), ) ) //回調(diào)函數(shù)部分 strokeSetting(key,e){ let nodeData = e.part.data; console.log(key,e,nodeData); let nodeLevel = key.split('-').length -1 if(nodeLevel===0){ return "#FF0000" }else if(nodeLevel===1){ return "#00FF00" }else{ return "#0000FF" } }, descDesiredSize(key,e){ let nodeData = e.part.data; return nodeData.source?new go.Size(70, 50):new go.Size(120, 50); }, pictureVisible(key,e){ let nodeData = e.part.data; return nodeData.source?true:false; },
其打印內(nèi)容如下
通過new go.Binding()
進(jìn)行配置的時候,一共有三個參數(shù)。其中第一個參數(shù)是需要配置的屬性名稱,第二個則是傳遞的node內(nèi)的參數(shù)的值(如上面例子中的key,1、1-1
等),第三個參數(shù)則是回調(diào)函數(shù)的函數(shù)名。而回調(diào)函數(shù)有兩個參數(shù),第一個參數(shù)是傳過來的node內(nèi)的參數(shù)的值(如上面例子中的key,1、1-1
等)。第二個參數(shù)e則是gojs的渲染對象,可以根據(jù)e.part.data
可以獲取到節(jié)點(diǎn)的所有數(shù)據(jù),方便在配置不同的屬性值的時候進(jìn)行分別判斷。
小提示
new go.Binding()
在進(jìn)行配置的時候,其第二個參數(shù)必須為節(jié)點(diǎn)內(nèi)都存在該字段,如果某些節(jié)點(diǎn)沒有該字段,其visible
屬性會默認(rèn)返回為true(也就是顯示),會造成需求和顯示內(nèi)容不同的情況,一定需要注意.
go.Node的端口(Port)配置
節(jié)點(diǎn)的端口默認(rèn)是一個,但是可以經(jīng)過配置顯示很多個。而默認(rèn)的端口位置也會居中。因此,對上面的內(nèi)容進(jìn)行稍加改造,把節(jié)點(diǎn)的Auto
屬性修改為Vertical
。然后分別在go.Node
和go.Shape
上設(shè)置端口進(jìn)行一下對比。
第一種方式(對go.Node
設(shè)置端口)
$$(go.Node,"Vertical", $$(go.Shape,"RoundedRectangle", { fromSpot: go.Spot.Right, toSpot: go.Spot.Left }, { desiredSize: new go.Size(120, 80),//設(shè)置圖形的尺寸 strokeWidth: 1,//設(shè)置邊框的寬度 parameter1: 3,//設(shè)置圖形的圓角 fill:null,//設(shè)置內(nèi)部填充的顏色 stroke:"#67B73C",//設(shè)置邊框的顏色 }, new go.Binding("stroke", "key", this.strokeSetting) ), $$(go.Panel,"Table",{desiredSize: new go.Size(120, 80)}, $$(go.TextBlock,{row:0,column: 0,alignment: go.Spot.Top,margin:5,font: "bold 14px sans-serif ",stroke:"#FF0000"},new go.Binding("text")), $$(go.TextBlock,{row:1,column: 0,alignment: go.Spot.Left,stroke:"#FF9900",overflow: go.TextBlock.OverflowEllipsis,maxLines: 2,},new go.Binding("text","desc"),new go.Binding("desiredSize", "key", this.descDesiredSize)), $$(go.Picture,{ row:0,column: 1,rowSpan:2,desiredSize: new go.Size(50, 50) },new go.Binding("source"),new go.Binding("visible", "key", this.pictureVisible)), ) );
第二種方式,在go.Shpe
上設(shè)置端口在普通的繪圖模板中添加端口的時候,一定要添加portId
$$(go.Node,"Vertical", $$(go.Shape,"RoundedRectangle", { desiredSize: new go.Size(120, 80),//設(shè)置圖形的尺寸 strokeWidth: 1,//設(shè)置邊框的寬度 parameter1: 3,//設(shè)置圖形的圓角 fill:null,//設(shè)置內(nèi)部填充的顏色 stroke:"#67B73C",//設(shè)置邊框的顏色 portId: "", fromSpot: go.Spot.Right, toSpot: go.Spot.Left }, new go.Binding("stroke", "key", this.strokeSetting) ), $$(go.Panel,"Table",{desiredSize: new go.Size(120, 80)}, $$(go.TextBlock,{row:0,column: 0,alignment: go.Spot.Top,margin:5,font: "bold 14px sans-serif ",stroke:"#FF0000"},new go.Binding("text")), $$(go.TextBlock,{row:1,column: 0,alignment: go.Spot.Left,stroke:"#FF9900",overflow: go.TextBlock.OverflowEllipsis,maxLines: 2,},new go.Binding("text","desc"),new go.Binding("desiredSize", "key", this.descDesiredSize)), $$(go.Picture,{ row:0,column: 1,rowSpan:2,desiredSize: new go.Size(50, 50) },new go.Binding("source"),new go.Binding("visible", "key", this.pictureVisible)), ) );
其端點(diǎn)片在go.shape
的中心位置.根據(jù)需求,方便調(diào)整。
結(jié)語
可視化圖形主要是由節(jié)點(diǎn)和節(jié)點(diǎn)之間的關(guān)系連線組成,節(jié)點(diǎn)內(nèi)主要是顯示的關(guān)系角色、部門等主角對象,內(nèi)部必然有很多的信息。可以根據(jù)自己的需求,進(jìn)行定制化的顯示。
以上就是GoJs節(jié)點(diǎn)繪圖模板--Node的詳細(xì)內(nèi)容,更多關(guān)于GoJs節(jié)點(diǎn)繪圖模板Node的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JS實(shí)現(xiàn)多物體運(yùn)動的方法詳解
這篇文章主要介紹了JS實(shí)現(xiàn)多物體運(yùn)動的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了javascript實(shí)現(xiàn)多物體運(yùn)動的原理與相關(guān)操作技巧,需要的朋友可以參考下2018-01-01JS Array.from()將偽數(shù)組轉(zhuǎn)換成數(shù)組的方法示例
這篇文章主要介紹了JS Array.from()將偽數(shù)組轉(zhuǎn)換成數(shù)組的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03AngularJS+Bootstrap實(shí)現(xiàn)多文件上傳與管理
這篇文章主要為大家詳細(xì)介紹了AngularJS+Bootstrap實(shí)現(xiàn)多文件上傳與管理,對上傳文件進(jìn)行加載與刪除操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11用JavaScript實(shí)現(xiàn)用一個DIV來包裝文本元素節(jié)點(diǎn)
當(dāng)我試圖將文本(可能也包含HTML元素)用一個DIV元素包起來時,可以使用下面的方法,需要的朋友可以參考下2014-09-09微信小程序中如何使用flyio封裝網(wǎng)絡(luò)請求
這篇文章主要介紹了微信小程序中如何使用flyio封裝網(wǎng)絡(luò)請求,F(xiàn)ly.js 通過在不同 JavaScript 運(yùn)行時通過在底層切換不同的 Http Engine來實(shí)現(xiàn)多環(huán)境支持,但同時對用戶層提供統(tǒng)一、標(biāo)準(zhǔn)的Promise API,需要的朋友可以參考下2019-07-07動態(tài)加載js、css等文件跨iframe實(shí)現(xiàn)
這篇文章主要介紹了動態(tài)加載js、css等文件跨iframe實(shí)現(xiàn)的方法,需要的朋友可以參考下2014-02-02