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" }

    最终效果如下图所示:

    民大赵老师
  • 相关阅读:
    UITableView移除某行的分割线和让分割线宽度为cell的宽度
    UIButton防止被重复点击
    给View添加手势,防止点击View上其他视图触发点击效果
    自定义导航栏返回时的滑动手势处理
    一个UITableViewCell的简单动画效果
    二维码扫描
    代理的使用
    常用网站
    IOS 自定义View X系列出现一条线条
    UILabel自适应文本,让文本自适应
  • 原文地址:https://www.cnblogs.com/gezhaoatdlnu/p/12677630.html
Copyright © 2011-2022 走看看