zoukankan      html  css  js  c++  java
  • gojs进阶教程

    在上节课中我们已经基本上掌握了如何利用gojs这个库来在浏览器上绘制一个简单的关系图,具体代码如下,不熟悉代码的同学可以在博客下方点击gojs入门的链接来温习上一篇博文。

     1 <!doctype html>
     2 <html>
     3 <head>
     4   <script src="https://unpkg.com/gojs/release/go.js"></script>
     5   <script>
     6     function init() {
     7       var $ = go.GraphObject.make;
     8        myDiagram = $(go.Diagram, "myDiagramDiv");
     9        var nodeDataArray = [
    10            { key: "Alpha"},
    11            { key: "Beta" },
    12            
    13            { key: "Delta"},
    14            { key: "Gamma" }
    15        ];
    16        var linkDataArray = [
    17            { to: "Beta", from: "Alpha" },
    18            { to: "Delta", from: "Alpha" },
    19            { to: "Gamma", from: "Alpha" }
    20        ];
    21        myDiagram.model = new go.GraphLinksModel(nodeDataArray, linkDataArray);
    22 
    23        
    24     }
    25     </script>
    26 </head>
    27 <body onload="init()">
    28     <div id="myDiagramDiv"  style="700px; height:150px"></div>
    29     </body>
    30 </html>

    该段代码对应的关系图如下所示:

     上面的关系图的节点外观过于简单,如果我们想要得到更美观一些的关系图,例如下面这样的该怎么做呢?这时候就需要利用到gojs提供的模板(template)了,模板相当于盛放节点的容器,你可以指定这个容器的形状,填充色等等。

     要想实现上述美化后的关系图,只需要在原有的代码基础上做如下两处改动:

    1 var nodeDataArray = [
    2            { key: "Alpha", color: "lime"},
    3            { key: "Beta",color: "cyan" },
    4   
    5            { key: "Delta",color: "pink"},
    6            { key: "Gamma" ,color: "maroon"}
    7        ];

    第一处改动是对nodeDataArray数组中的每个对象元素增加一个color属性用来指定节点的颜色。

    1  myDiagram.nodeTemplate =
    2        $(go.Node, "Auto",
    3            $(go.Shape, "RoundedRectangle",
    4 new go.Binding("fill", "color") 5 ), 6 $(go.TextBlock,
    7 new go.Binding("text", "key") 8 ) 9 );

    第二处改动是为视图myDiagram中盛放每个节点的容器nodeTemplate属性赋值,为该容器赋值的构造器可以接收多个参数,第一个参数是类型参数,这里是go.Node,表示要改变节点的样式。第二个参数是容器内部的布局,这里是"Auto",它的含义是这个容器里至少包含两个元素,第一个元素会包裹容器里面其他的元素。第三个参数是go.Shape,它代表容器里的第一个元素,这里我们指定它的形状是圆角矩形,即"RoundedRectangle",new go.Binding("fill", "color")这句话用来设定每个节点容器的填充色,通过new关键字创建一个新的go.Binding数据绑定对象可以让我们把容器填充色属性fill和nodeDataArray中每个节点对象的color属性绑定,使得每个节点容器呈现出我们指定的内部填充色。第四个参数是go.TextBlock,它是文本框,new go.Binding("text", "key")这句话用来将文本框里的文字与nodeDataArray中每个节点的 key值绑定。由于设置了auto属性的缘故,文本框被包裹在圆角矩形里面。

    除了可以把每个节点放在容器里来改变节点的外观外,我们还可以用类似的方法通过给视图myDiagram中负责管理边的linkTemplate属性赋值来调整边的样式,同样也只需要在原有的代码基础上做如下两处改动:

    1 var linkDataArray = [
    2            { to: "Beta", from: "Alpha",color: "red" },
    3            { to: "Delta", from: "Alpha" },
    4            { to: "Gamma", from: "Alpha" }
    5        ];

     上面的代码在linkDataArray每个边对象属性中加入一个color属性将其值设为"red"。

    1 myDiagram.linkTemplate =
    2        $(go.Link,
    3            $(go.Shape, { strokeWidth: 3 },
    4                new go.Binding("stroke", "color")),
    5            $(go.Shape,
    6            { toArrow: "Standard", stroke: null },
    7                new go.Binding("fill", "color"))
    8        );

    第二处改动是为视图myDiagram中linkTemplate属性复制,为该容器赋值的构造器可以接收多个参数,第一个参数是类型参数,这里是go.Link,表示用来改变连线(边)的样式。第二个参数是形状参数go.Shape,,它代表边的样式,这里我们指定边的粗细为3,new go.Binding("stroke", "color")这句话用来设定边的颜色,通过new关键字创建一个新的go.Binding数据绑定对象可以让我们把边颜色属性stroke和linkDataArray中每个边对象的color属性绑定,使得节点之间的边呈现出我们在linkDataArray里指定的颜色。第三个参数是形状参数go.Shape,,它代表箭头的样式,toArrow:" Standard "表示要在边的终点加上箭头, stroke:null表示是空心箭头;  new go.Binding("fill", "color")这句话用来设定箭头的颜色,通过new关键字创建一个新的go.Binding数据绑定对象可以让我们把箭头颜色属性fill和linkDataArray中每个边对象的color属性绑定,使得箭头呈现出我们在linkDataArray里指定的颜色。

     实现上图的完整代码如下:

     1 <!doctype html>
     2 <html>
     3 <head>
     4   <script src="https://unpkg.com/gojs/release/go.js"></script>
     5   <script>
     6     function init() {
     7       var $ = go.GraphObject.make;
     8        myDiagram = $(go.Diagram, "myDiagramDiv");
     9        var nodeDataArray = [
    10            { key: "Alpha", color: "lime"},
    11            { key: "Beta",color: "cyan" },
    12            
    13            { key: "Delta",color: "pink"},
    14            { key: "Gamma" ,color: "maroon"}
    15        ];
    16        var linkDataArray = [
    17            { to: "Beta", from: "Alpha",color: "red" },
    18            { to: "Delta", from: "Alpha" },
    19            { to: "Gamma", from: "Alpha" }
    20        ];
    21        myDiagram.model = new go.GraphLinksModel(nodeDataArray, linkDataArray);
    22        myDiagram.nodeTemplate =
    23        $(go.Node, "Auto",
    24            $(go.Shape, "RoundedRectangle", 
    25                new go.Binding("fill", "color")
    26            ),
    27            $(go.TextBlock, 
    28                new go.Binding("text", "key")
    29            )
    30        );
    31         myDiagram.linkTemplate =
    32        $(go.Link,
    33            $(go.Shape, { strokeWidth: 3 },
    34                new go.Binding("stroke", "color")),
    35            $(go.Shape,
    36            { toArrow: "Standard", stroke: null },
    37                new go.Binding("fill", "color"))
    38        );
    39 
    40        
    41     }
    42     </script>
    43 </head>
    44 <body onload="init()">
    45     <div id="myDiagramDiv"  style="700px; height:150px"></div>
    46     </body>
    47 </html>

     如果要想给节点分组该怎么办呢?比如上面的Delta和Gamma两个节点都想把它们归入到"GroupB"里面,然后让节点Alpha指向GroupB。实现这个分组功能只需要对nodeDataArray和linkDataArray进行以下修改即可。

     var nodeDataArray = [
               { key: "Alpha", color: "lime"},
               { key: "Beta",color: "cyan" },
               { key: "GroupB", isGroup: true},
               { key: "Delta", color: "pink", group: "GroupB"},
               { key: "Gamma" ,color: "maroon", group: "GroupB"}
           ];
           var linkDataArray = [
               { to: "Beta", from: "Alpha",color: "red" },
               { to: "GroupB", from: "Alpha" }

    最终效果如下图所示:

    民大赵老师
  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/gezhaoatdlnu/p/12677630.html
Copyright © 2011-2022 走看看