gojs繪流程圖


引用:http://www.tuicool.com/articles/eEruaqu

   http://www.open-open.com/lib/view/open1435023502544.html

gojs是一個能夠讓我們很容易的實現基於html5瀏覽器繪制具有交互性的圖形圖表的JavaScript框架。 gojs采用了面向對象的編程模式。以圖形對象表示繪圖模板。以用普通js對象存儲數據作為數據模型,然后賦值給圖形對象的屬性作為數據綁定的模式。 gojs同樣提供了大量工具類來代表我們的交互行為。我們需要做的就是創建圖形對象、構建數據模型、設置屬性、綁定數據模型、使用工具類添加行為即可創建 出具有豐富交互性能的各種圖表

一個簡單的流程圖

1.HTML

<div id="myDiagram" style="width:400px; height:150px; background-color: #DAE4E4;"></div>

2.$是一個全局變量,全局變量相當於一個畫筆,我們先定義一個畫筆工具。之后我們就可以通過 $ 符號來調用它自身的一些方法、屬性、枚舉對象等

var $ = go.GraphObject.make;//

3.有了畫筆,還需要畫布,於是我們需要定義一個畫布用來裝載一些具體內容

var myDiagram =$(go.Diagram, //定義的畫布
"myDiagram",//
要渲染的DIV 的Id 名稱,1中html中的id
{
initialAutoScale: go.Diagram.Uniform, contentAlignment: go.Spot.Center,//對齊方式 layout://畫布里的元素布局方式    
  $(
go.ForceDirectedLayout,{
  defaultSpringLength: 30,   defaultElectricalCharge: 100   }) });

這個畫筆可以繪制節點、鏈接、區域、圖案、形狀、文本等

4.畫筆繪制了一個文本對象 go.TextBlock ,並為它填充了屬性 text、stroke、font、margin

$(go.TextBlock,{
 text:"www.peng8.net",  stroke: "red",  font: "bold 10pt helvetica, bold arial, sans-serif",  margin: 4 })

5.gojs繪制的圖表(Diagram)具有兩個最基本的元素,就是點和線(Node和Link),並且他們可以自由組合組成一個組(Group)。所有的元素都處在圖層(Layer)上,並且可以對它們進行布局(Layout)。

5.1Node

myDiagram.nodeTemplate = $(go.Node, "Auto",
       $(go.Shape, "RoundedRectangle",//形狀:一個 圓角矩形 ,默認填充色為 白色,邊框顏色為 紅色
               {
                   fill: "white",
                   stroke: "red"
               },
               new go.Binding("fill", "color")
       ),
       $(go.TextBlock,//文本
             {
                  font: "bold 10pt helvetica, bold arial, sans-serif",
                  margin: 4
              },
           new go.Binding("text", "text"))//申明動態綁定text屬性,將數據源中提供text字段的值賦值給當前的text屬性
);

5.2Link
myDiagram.linkTemplate = $(go.Link, { adjusting: go.Link.Stretch, reshapable: true }, new go.Binding("points").makeTwoWay(), $(go.Shape, //用來畫線 { isPanelMain: true, stroke: "black" }), $(go.Shape, //用來畫箭頭 { toArrow: "standard", stroke: null }), $(go.TextBlock, //用來顯示線上的label { textAlign: "center", segmentOffset: new go.Point(0, -10), font: "10pt helvetica, arial, sans-serif", stroke: "#555555", margin: 4 }, new go.Binding("text", "text") ) );

6.每個Diagram都是通過數據模型(Model)來填充和確定Node的信息和Link的所屬關系的。並且我們只需要創建好Node和Link的 模板以及數據模型,其他的是事情都交給gojs去處理。它會通過Model.nodeDataArray方法和 GraphLinksModel.linkDataArray方法自動加載模型並構建元素。

  jsonList 是我前端定義用來接收ajax返回數據的一個對象

var jsonList = {
       nodeKeyProperty: "key", //關聯的主鍵
       nodeDataArray: [{key:1,text:"節點1"},
             {key:2,text:"節點2"},
             {key:3,text:"節點3"},

             {key:4,text:"節點4"},
             {key:5,text:"節點5"},
             {key:6,text:"節點6"}],//節點數據 linkDataArray: [{from:1,to:2},
              {from:2,to:3},
              {from:2,to:5},
              {from:3,to:6},
              {from:5,to:4}]//點對應關系數據 ,上面from 和to 即 開始節點的主鍵指向結束節點的主鍵 };

7.
最后就是如何給流程圖填充動態數據了,這里我采用了json的方式,流程圖賦值就是一句話就夠了
myDiagram.model = go.Model.fromJson(jsonList);

8.效果圖:很粗糙的一張圖

 

 

 

 

 

 

GoJS是一個JavaScript庫,讓你輕松創建現代Web瀏覽器的交互圖。 GoJS支持圖形化的模板和圖形對象屬性數據模型的數據綁定。你只需要保存和恢復模型,包括持有任何性質的應用需求,簡單的JavaScript對象。許 多預定義的工具和命令執行,大部分的圖表所需要的標准的行為。外觀和行為的定制是大多設置屬性的問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM