首頁 > 要聞 >

          GoJs的文本繪圖模板TextBlock使用實例-今日視點

          2023-04-16 05:52:00 腳本之家
          目錄
          前言TextBlock的使用TextBlock的配置屬性節(jié)點內文本的雙擊編輯

          前言

          文接上回,我們已經使用gojs實現(xiàn)了一個最最最基本的樹形布局。這次我們開始對圖形的骨架進行一個內容展示上的豐富和顯示風格上的美化。可以說我們圖形的節(jié)點部分是我們整個圖形大部分信息的一個展示載體。而我們的需求當中,為了使一些信息更加形象,醒目。我們會用到文本,圖標,圖片,和節(jié)點的背景的顏色等等來顯示不同類型的節(jié)點。

          TextBlock的使用

          本次的介紹便是通過TextBlock的屬性來控制節(jié)點內的文本顯示內容和一些樣式的修改,對我們的關系圖進行進一步的豐富。首先我們先準備一些數據


          (資料圖片)

          nodes: [
                  {
                    key: "1",
                    text: "三國人物志",
                    nodeBs: "root",
                  },
                  {
                    key: "1-1",
                    text: "曹操",
                    nodeBs: "cc",
                  },
                  {
                    key: "1-2",
                    text: "劉備",
                    nodeBs: "lb",
                  },
                  {
                    key: "1-3",
                    text: "孫權",
                    nodeBs: "sq",
                  },
                ],
                links: [
                  {
                    from: "1",
                    to: "1-1",
                  },
                  {
                    from: "1",
                    to: "1-2",
                  },
                  {
                    from: "1",
                    to: "1-3",
                  },
                ],
          

          其中nodes中的key字段為節(jié)點的唯一標識,為必須。而text字段則是我們希望顯示到節(jié)點上的內容,nodeBs主要是一個節(jié)點的標識,方便批量處理一些節(jié)點的時候進行判斷。links中存放的為必須的from(起點)和to(終點)字段。

          this.myDiagram = $$(go.Diagram, "myDiagramDiv", {
              layout: $$(go.TreeLayout),//在初始化時畫布的布局方式
          });
          this.myDiagram.nodeTemplate = $$(
              go.Node,  //節(jié)點的node配置項
              "Horizontal", //節(jié)點內部的布局方式
              $$(
                  go.TextBlock,//指定為gojs規(guī)定的文本顯示形式
                  new go.Binding("text", "text") //將我們的text字段顯示到節(jié)點中
              )
          )
          this.myDiagram.model = new go.GraphLinksModel(this.nodes, this.links);
          

          在這里我們可以看一下,通過我們實例化之后的nodeTemplate屬性來實現(xiàn)我們的node的模板進行一個自定義的填充內容,來實現(xiàn)節(jié)點內部不同內容的顯示。其中go.Node是固定搭配,就是我們是對node模板進行一個配置,然后就需要我們我們的操作對象為node,然后再內部嵌套各種其他的模板。Horizontal是節(jié)點內部的一種布局方式,這個我們后面會統(tǒng)一進行分析。

          當然你也可以寫成這種形式

          this.myDiagram.nodeTemplate = new go.Node().add(new go.TextBlock().bind("text"));
          

          因為第一種的寫法比較清晰,因此我們主要是采用第一種方式進行節(jié)點內的布局填充,這樣我們就得到了這樣一個圖形

          TextBlock的配置屬性

          在這里對顯示的文字修改一下樣式,這里列舉一些常用的屬性

          $$(
              go.TextBlock,//指定為gojs規(guī)定的文本顯示形式
              {
                  stroke: "red",//設置字體顏色,默認為黑色
                  background:"yellow",//字體的背景顏色,默認透明
                  font: "14px,sans-serif ",//字體的名稱,大小,是否加粗等
                  margin:8,//類似css,外邊距
                  width:20,//寬度
                  height:20,//高度
                  textAlign:"left",//文本的對齊方式,有l(wèi)eft,center,right三種屬性
                  alignment:go.Spot.Left, // 文本在父級結構中的對齊方式,有go.Spot.Left,go.Spot.Center,go.Spot.Right三種屬性
                  minSize: new go.Size(10, 14),//文本的最小尺寸,兩個參數分別為寬和高
                  maxSize: new go.Size(NaN, NaN), //文本的最大寬度,如果我們設置為NaN,其尺寸會進行自適應
                  overflow: go.TextBlock.OverflowClip,//文本溢出寬度之后的顯示方式,OverflowClip為換行.OverflowEllipsis是顯示省略號
                  maxLines: 2,//換行之后最多顯示幾行
                  verticalAlignment:"Top"http://垂直方向上的的對齊方式,有Top,Center,Bottom三種屬性
                 },
          )
          

          既然textAlignalignment都是文本的對齊方式,那他們之間有什么區(qū)別呢?我們把節(jié)點單獨給拿出來,然后分別對添加這兩種屬性的三個參數值進行對比一下。

          $$(go.Panel, "Vertical",{width:300,background:"#67B73C"},//父級模板,相當于外層html標簽,然后我們給外層標簽一個寬度
              $$(go.TextBlock,{textAlign:"left",text:"textAlignLeft",width:200,background:"#FF9900",margin:5}),
              $$(go.TextBlock,{textAlign:"center",text:"textAlignCenter",width:200,background:"#FF9900",margin:5}),
              $$(go.TextBlock,{textAlign:"right",text:"textAlignRight",width:200,background:"#FF9900",margin:5}),
              $$(go.TextBlock,{alignment:go.Spot.Left,text:"alignmentLeft",width:200,background:"#FF9900",margin:5}),
              $$(go.TextBlock,{alignment:go.Spot.Center,text:"alignmentCenter",width:200,background:"#FF9900",margin:5}),
              $$(go.TextBlock,{alignment:go.Spot.Right,text:"alignmentRight",width:200,background:"#FF9900",margin:5})
          ),
          

          我們在外層增加一個模板并且添加寬度之后,分別在內層的文本標簽設置不同的屬性和屬性值,顯示內容可以知道。textAlign屬性是如果設置了文本區(qū)域的寬度,在文本顯示區(qū)域內部居左、居中、居右顯示。而alignment屬性則是以文本區(qū)域為一個整體,全部內容在父級模板中的相對位置居左、居中、居右。

          然后我們看一下overflow的兩種文本溢出方式的區(qū)別

          $$(go.Panel, "Vertical",{width:300,background:"#67B73C"},
              $$(go.TextBlock,{text:"go textBlock overflowDefult overflowDefult",width:100,background:"#FF9900",margin:5}),
              $$(go.TextBlock,{text:"go textBlock overflowDefult overflowDefult",maxLines: 2,width:100,background:"#FF9900",margin:5}),
              $$(go.TextBlock,{overflow: go.TextBlock.OverflowClip,text:"go textBlock overflowClip overflowClip",width:100,background:"#FF9900",margin:5}),
              $$(go.TextBlock,{overflow: go.TextBlock.OverflowClip,maxLines: 2,text:"go textBlock overflowClip overflowClip",width:100,background:"#FF9900",margin:5}),
              $$(go.TextBlock,{overflow: go.TextBlock.OverflowEllipsis,text:"go textBlock overflowEllipsis overflowEllipsis",width:100,background:"#FF9900",margin:5}),
              $$(go.TextBlock,{overflow: go.TextBlock.OverflowEllipsis,maxLines: 2,text:"go textBlock overflowEllipsis overflowEllipsis",width:100,background:"#FF9900",margin:5}),
          ),
          

          由此我們可以發(fā)現(xiàn)overflow的兩種屬性go.TextBlock.OverflowClipgo.TextBlock.OverflowEllipsis在單獨設置的時候是和默認效果沒有區(qū)別的,都是會默認進行一個換行。而如果我們再加上行數的限制maxLines: 2之后就出現(xiàn)了區(qū)別go.TextBlock.OverflowClip屬性是和默認情況是一樣的,會對我們的文本進行一個整詞切割,而go.TextBlock.OverflowEllipsis則是出現(xiàn)了超出部門內容顯示...,因此在開發(fā)過程中我們可以可以對超長文本進行go.TextBlock.OverflowEllipsis屬性和maxLines的結合使用,保證項目中的的節(jié)點的規(guī)格不至于過長而導致圖形的顯示冗余。

          節(jié)點內文本的雙擊編輯

          gojs還為我們提供了editable屬性,可以在節(jié)點內直接雙擊出現(xiàn)的輸入框對我們的節(jié)點內的文本顯示進行一個編輯,在編輯完成之后,只需要點擊畫布就可以把編輯后的內容顯示到節(jié)點之中。

          $$(
              go.TextBlock,
              {
                  editable:true,//是否開啟雙擊編輯節(jié)點內部文本功能
                  textEdited: function (tb, olds, news) {//編輯文本成功之后的回調函數
                      console.log(tb.part.data,olds,news)
                  }
              },
              new go.Binding("text", "text")
          ),
          

          在節(jié)點的文本框雙擊之后就可以出現(xiàn)一個輸入框的彈出,可以輸入新的內容之后點擊畫布,然后在編輯成功之后的回調函數textEdited分別有三個參數,我們可以通過第一個參數的tb.part.data來獲取我們操作的節(jié)點的全部數據,而第二個參數則是編輯之前的內容(也就是我們示例中的曹操),而第三個參數則是我們編輯之后的內容(也就是我們示例中的曹操阿瞞)。因此我們可以通過獲取之后的新值來更改我們的數據來保證數據和圖中內容對應。

          以上就是GoJs的文本繪圖模板TextBlock使用實例的詳細內容,更多關于GoJs TextBlock文本繪圖模板的資料請關注腳本之家其它相關文章!

          關鍵詞

          相關推薦

          国产成人精品日本亚洲专区| 亚洲成a人无码亚洲成av无码| 国产 亚洲 中文在线 字幕| 亚洲国产精品乱码一区二区| 最新国产AV无码专区亚洲| 亚洲男人天堂2020| 亚洲精品动漫人成3d在线| 亚洲国产91精品无码专区| 亚洲Av无码乱码在线观看性色 | 亚洲色大成网站www永久男同| 亚洲国产成人久久综合一区| 亚洲福利一区二区精品秒拍| 亚洲第一网站免费视频| 亚洲国产精品人久久电影| 亚洲人成影院77777| 亚洲人xxx日本人18| 国产亚洲玖玖玖在线观看| 亚洲人成色777777精品| 亚洲JIZZJIZZ妇女| 亚洲AV无码成H人在线观看| 亚洲精品和日本精品| 中文字幕亚洲一区二区va在线| 亚洲色欲久久久综合网 | 亚洲综合av一区二区三区不卡 | 国产成人精品亚洲2020| 亚洲欧洲无码一区二区三区| 色偷偷亚洲第一综合网| 亚洲国产一级在线观看| 亚洲精品无码永久在线观看你懂的 | 亚洲无码高清在线观看| 国产亚洲精品AA片在线观看不加载 | 亚洲狠狠婷婷综合久久| 国产成人不卡亚洲精品91| 亚洲国产综合精品中文字幕| 亚洲欧洲国产精品香蕉网| 亚洲av一综合av一区| 亚洲精品中文字幕麻豆| 亚洲综合一区无码精品| 日韩亚洲国产二区| 亚洲情XO亚洲色XO无码| 亚洲精品视频专区|