gojs插件——動態可拖動流程圖插件


gojs插件——動態可拖動流程圖插件

gojs是一個前端插件

使用時需要去官網下載對應的js文件:https://gojs.net/latest/index.html

不同的樣式參考此鏈接官網的介紹很詳細: https://gojs.net/latest/intro/index.html

下載之后並不是所有的js文件都用的到,我們需要了解到只有三個

"""
go.js				 正常必須要導入的文件
go-debug.js  會展示報錯消息 類似於debug模式 線上肯定不會使用
Figures.js	 擴展圖標(go.js自帶的圖標比較少,如果出現圖標顯示不出來的情況)
"""
# 總結:使用的時候導入go.js和Figures.js

基本使用

固定套路:先用div在頁面上划定區域,之后所有的gojs圖標渲染全部在該div內部進行

<div id="myDiagramDiv" style="width:500px; height:350px; background-color: #DAE4E4;"></div>
<script src="go.js"></script>
<script>
  var $ = go.GraphObject.make;
  // 第一步:創建圖標
  var myDiagram = $(go.Diagram, "myDiagramDiv"); // 創建圖標,用於在頁面上畫圖
  // 第二步:創建一個節點,內容為jason
  var node = $(go.Node, $(go.TextBlock, {text: "jason"}));
  // 第三步:將節點添加到圖標中
  myDiagram.add(node)
</script>

重要概念介紹

  • TextBlock創建文本
  • Shape圖形
  • Node節點(文本與圖形結合)
  • Link箭頭

TextBlock

<div id="myDiagramDiv" style="width:500px; height:350px; background-color: #DAE4E4;"></div>
<script src="go.js"></script>
<script>
    var $ = go.GraphObject.make;
    // 第一步:創建圖標
    var myDiagram = $(go.Diagram, "myDiagramDiv"); // 創建圖標,用於在頁面上畫圖

    var node1 = $(go.Node, $(go.TextBlock, {text: "jason"}));
    myDiagram.add(node1);
    var node2 = $(go.Node, $(go.TextBlock, {text: "jason", stroke: 'red'}));
    myDiagram.add(node2);
    var node3 = $(go.Node, $(go.TextBlock, {text: "jason", background: 'lightblue'}));
    myDiagram.add(node3);
</script>

Shape

<div id="myDiagramDiv" style="width:500px; height:350px; background-color: #DAE4E4;"></div>
<script src="go.js"></script>
<script src="Figures.js"></script>
<script>
    var $ = go.GraphObject.make;
    // 第一步:創建圖標
    var myDiagram = $(go.Diagram, "myDiagramDiv"); // 創建圖標,用於在頁面上畫圖

    var node1 = $(go.Node,
        $(go.Shape, {figure: "Ellipse", width: 40, height: 40})
    );
     myDiagram.add(node1);

     var node2 = $(go.Node,
        $(go.Shape, {figure: "RoundedRectangle", width: 40, height: 40, fill: 'green',stroke:'red'})
    );
    myDiagram.add(node2);

    var node3 = $(go.Node,
        $(go.Shape, {figure: "Rectangle", width: 40, height: 40, fill: null})
    );
    myDiagram.add(node3);

    var node5 = $(go.Node,
        $(go.Shape, {figure: "Club", width: 40, height: 40, fill: 'red'})
    );
    myDiagram.add(node5);
</script>

node

<div id="myDiagramDiv" style="width:500px; height:350px; background-color: #DAE4E4;"></div>
<script src="go.js"></script>
<script src="Figures.js"></script>
<script>
    var $ = go.GraphObject.make;
    // 第一步:創建圖標
    var myDiagram = $(go.Diagram, "myDiagramDiv"); // 創建圖標,用於在頁面上畫圖

    var node1 = $(go.Node,
         "Vertical",  // 垂直方向
        {
            background: 'yellow',
            padding: 8
        },
        $(go.Shape, {figure: "Ellipse", width: 40, height: 40,fill:null}),
        $(go.TextBlock, {text: "jason"})
    );
    myDiagram.add(node1);

    var node2 = $(go.Node,
        "Horizontal",  // 水平方向
        {
            background: 'white',
            padding: 5
        },
        $(go.Shape, {figure: "RoundedRectangle", width: 40, height: 40}),
        $(go.TextBlock, {text: "jason"})
    );
    myDiagram.add(node2);

    var node3 = $(go.Node,
        "Auto",  // 居中
        $(go.Shape, {figure: "Ellipse", width: 80, height: 80, background: 'green', fill: 'red'}),
        $(go.TextBlock, {text: "jason"})
    );
    myDiagram.add(node3);

</script>
<div id="myDiagramDiv" style="width:500px; min-height:450px; background-color: #DAE4E4;"></div>
    <script src="go.js"></script>
    <script>
        var $ = go.GraphObject.make;

        var myDiagram = $(go.Diagram, "myDiagramDiv",
            {layout: $(go.TreeLayout, {angle: 0})}
        ); // 創建圖標,用於在頁面上畫圖

        var startNode = $(go.Node, "Auto",
            $(go.Shape, {figure: "Ellipse", width: 40, height: 40, fill: '#79C900', stroke: '#79C900'}),
            $(go.TextBlock, {text: '開始', stroke: 'white'})
        );
        myDiagram.add(startNode);

        var downloadNode = $(go.Node, "Auto",
            $(go.Shape, {figure: "RoundedRectangle", height: 40, fill: 'red', stroke: '#79C900'}),
            $(go.TextBlock, {text: '下載代碼', stroke: 'white'})
        );
        myDiagram.add(downloadNode);

        var startToDownloadLink = $(go.Link,
            {fromNode:downloadNode, toNode:startNode,},
            $(go.Shape, {strokeWidth: 1}),
            $(go.Shape, {toArrow: "OpenTriangle", fill: null, strokeWidth: 1})
        );
        myDiagram.add(startToDownloadLink);
    </script>

思考:我們想動態生成圖標並且動態的修改圖標消息和狀態,數據應該來自於后端

所以解析來提供一個可以前后端數據交互的寫法

數據綁定

<div id="diagramDiv" style="width:100%; min-height:450px; background-color: #DAE4E4;"></div>

    <script src="go.js"></script>
    <script>
        var $ = go.GraphObject.make;
        var diagram = $(go.Diagram, "diagramDiv",{
            layout: $(go.TreeLayout, {
                angle: 0,
                nodeSpacing: 20,
                layerSpacing: 70
            })
        });
        // 生成一個節點模版
        diagram.nodeTemplate = $(go.Node, "Auto",
            $(go.Shape, {
                figure: "RoundedRectangle",
                fill: 'yellow',
                stroke: 'yellow'
            }, new go.Binding("figure", "figure"), new go.Binding("fill", "color"), new go.Binding("stroke", "color")),
            $(go.TextBlock, {margin: 8}, new go.Binding("text", "text"))
        );
        // 生成一個箭頭模版
        diagram.linkTemplate = $(go.Link,
            {routing: go.Link.Orthogonal},
            $(go.Shape, {stroke: 'yellow'}, new go.Binding('stroke', 'link_color')),
            $(go.Shape, {toArrow: "OpenTriangle", stroke: 'yellow'}, new go.Binding('stroke', 'link_color'))
        );
        // 數據集合  以后替換ajax請求   注意使用key和parent來規定箭頭的指向
        var nodeDataArray = [
            {key: "start", text: '開始', figure: 'Ellipse', color: "lightgreen"},
            {key: "download", parent: 'start', text: '下載代碼', color: "lightgreen", link_text: '執行中...'},
            {key: "compile", parent: 'download', text: '本地編譯', color: "lightgreen"},
            {key: "zip", parent: 'compile', text: '打包', color: "red", link_color: 'red'},
            {key: "c1", text: '服務器1', parent: "zip"},
            {key: "c11", text: '服務重啟', parent: "c1"},
            {key: "c2", text: '服務器2', parent: "zip"},
            {key: "c21", text: '服務重啟', parent: "c2"},
            {key: "c3", text: '服務器3', parent: "zip"},
            {key: "c31", text: '服務重啟', parent: "c3"},
        ];
        diagram.model = new go.TreeModel(nodeDataArray);

        // 動態控制節點顏色變化   后端給一個key值 即可查找圖標並修改
        var node = diagram.model.findNodeDataForKey("zip");
        diagram.model.setDataProperty(node, "color", "lightgreen");
    </script>

總結

"""
通過數據綁定的方式就可以實現前后端交互的形式
"""

如何去除gojs自帶的水印

需要修改js文件源碼

查找js文件中固定的字符串7eba17a4ca3b1a8346

/*a.kr=b.V[Ra("7eba17a4ca3b1a8346")][Ra("78a118b7")](b.V,Jk,4,4);*/

注釋該字符串所在的一行代碼

並添加一行新的代碼

a.kr=function(){return false};


免責聲明!

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



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