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

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

gojs是一个能够让我们很容易的实现基于html5浏览器绘制具有交互性的图形图表的JavaScript框架。 gojs采用了面向对象的编程模式。以图形对象表示绘图模板。以用普通js对象存储数据作为数据模型,然后赋值给图形对象的属性作为数据绑定的模式。 gojs同样提供了大量工具类来代表我们的交互行为。我们需要做的就是创建图形对象、构建数据模型、设置属性、绑定数据模型、使用工具类添加行为即可创建 出具有丰富交互性能的各种图表

一个简单的流程图

1.HTML

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

2.$是一个全局变量,全局变量相当于一个画笔,我们先定义一个画笔工具。之后我们就可以通过 $ 符号来调用它自身的一些方法、属性、枚举对象等

  1. var $ = go.GraphObject.make;//

3.有了画笔,还需要画布,于是我们需要定义一个画布用来装载一些具体内容

  1. var myDiagram =$(go.Diagram, //定义的画布
    "myDiagram",//要渲染的DIV 的Id 名称,1中html中的id
    {
  2. initialAutoScale: go.Diagram.Uniform,
  3. contentAlignment: go.Spot.Center,//对齐方式
  4. layout://画布里的元素布局方式    
      $(go.ForceDirectedLayout,{
  5.   defaultSpringLength: 30,
  6.   defaultElectricalCharge: 100
  7.   })
  8. });

这个画笔可以绘制节点、链接、区域、图案、形状、文本等

4.画笔绘制了一个文本对象 go.TextBlock ,并为它填充了属性 text、stroke、font、margin

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

5.gojs绘制的图表(Diagram)具有两个最基本的元素,就是点和线(Node和Link),并且他们可以自由组合组成一个组(Group)。所有的元素都处在图层(Layer)上,并且可以对它们进行布局(Layout)。

5.1Node

  1. myDiagram.nodeTemplate = $(go.Node, "Auto",
  2. $(go.Shape, "RoundedRectangle",//形状:一个 圆角矩形 ,默认填充色为 白色,边框颜色为 红色
  3. {
  4. fill: "white",
  5. stroke: "red"
  6. },
  7. new go.Binding("fill", "color")
  8. ),
  9. $(go.TextBlock,//文本
  10. {
  11. font: "bold 10pt helvetica, bold arial, sans-serif",
  12. margin: 4
  13. },
  14. new go.Binding("text", "text"))//申明动态绑定text属性,将数据源中提供text字段的值赋值给当前的text属性
  15. );
  16.  
  17. 5.2Link
    myDiagram.linkTemplate =
  18. $(go.Link,
  19. { adjusting: go.Link.Stretch, reshapable: true },
  20. new go.Binding("points").makeTwoWay(),
  21. $(go.Shape, //用来画线
  22. {
  23. isPanelMain: true,
  24. stroke: "black"
  25. }),
  26. $(go.Shape, //用来画箭头
  27. {
  28. toArrow: "standard",
  29. stroke: null
  30. }),
  31. $(go.TextBlock, //用来显示线上的label
  32. {
  33. textAlign: "center",
  34. segmentOffset: new go.Point(0, -10),
  35. font: "10pt helvetica, arial, sans-serif",
  36. stroke: "#555555",
  37. margin: 4
  38. },
  39. new go.Binding("text", "text")
  40. )
  41. );

6.每个Diagram都是通过数据模型(Model)来填充和确定Node的信息和Link的所属关系的。并且我们只需要创建好Node和Link的 模板以及数据模型,其他的是事情都交给gojs去处理。它会通过Model.nodeDataArray方法和 GraphLinksModel.linkDataArray方法自动加载模型并构建元素。

  jsonList 是我前端定义用来接收ajax返回数据的一个对象

  1. var jsonList = {
  2. nodeKeyProperty: "key", //关联的主键
  3. 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"}],//节点数据
  4. linkDataArray: [{from:1,to:2},
                  {from:2,to:3},
                  {from:2,to:5},
                  {from:3,to:6},
                  {from:5,to:4}]//点对应关系数据 ,上面from 和to 即 开始节点的主键指向结束节点的主键
  5. };
  6.  
  7. 7.最后就是如何给流程图填充动态数据了,这里我采用了json的方式,流程图赋值就是一句话就够了
    myDiagram.model = go.Model.fromJson(jsonList);
  8.  
  9. 8.效果图:很粗糙的一张图

GoJS是一个JavaScript库,让你轻松创建现代Web浏览器的交互图。
GoJS支持图形化的模板和图形对象属性数据模型的数据绑定。你只需要保存和恢复模型,包括持有任何性质的应用需求,简单的JavaScript对象。许
多预定义的工具和命令执行,大部分的图表所需要的标准的行为。外观和行为的定制是大多设置属性的问题

gojs绘流程图的更多相关文章

  1. 基于GOJS绘制流程图

    基于GOJS封装的流程图设计(展示)工具类,主要分为两个工具类: 工具库依赖于go.js.jquery以及layer.js http://gojs.net/ http://jquery.com/ ht ...

  2. Spring配置类深度剖析-总结篇(手绘流程图,可白嫖)

    生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...

  3. 手绘流程图,教你WSL2与Docker容器无缝互相迁移

    摘要:本文主要介绍WSL2与Docker容器无缝迁移镜像. 本文分享自华为云社区<WSL2与Docker容器,无缝互相迁移>,作者: tsjsdbd . 注:本文提到的WSL都是指WSL2 ...

  4. 数据可视化-gojs插件使用技巧总结

    随着云计算时代的到来,由于Web技术的快速革新以及为了提供高质量的用户体验,数据可视化成为了前端技术发展的一大方向.为了解决这个问题,现如今涌现了很多优秀的第三方的javascript图形库,比如hi ...

  5. 软工+C(2017第3期) 超链接

    // 上一篇:分数和checklist // 下一篇:Alpha/Beta换人 注:平常看文章,总有能和构建之法,软件工程相关的链接,增量记录,也可以通过在其他人博客的交流中使用相关的超链接,在使用中 ...

  6. 软工+C(3): 超链接

    // 上一篇:分数和checklist // 下一篇:Alpha/Beta换人 注:平常看文章,总有能和构建之法,软件工程相关的链接,增量记录,也可以通过在其他人博客的交流中使用相关的超链接,在使用中 ...

  7. Orleans的入门教程

    Orleans的入门教程  官方Hello World 地址 https://github.com/dotnet/orleans/tree/master/Samples/2.0/HelloWorld ...

  8. PBFT 算法 java实现(下)

    PBFT 算法的java实现(下) 在上一篇博客中(如果没有看上一篇博客建议去看上一篇博客),我们介绍了使用Java实现PBFT算法中节点的加入,view的同步等操作.在这篇博客中,我将介绍PBFT算 ...

  9. DPSK通信系统的FPGA实现

    之前接触过一些FPGA的相关知识,借着实现一个简单的DPSK系统,顺便复习和记录一下Verilog HDL的简单使用方法.准备直接用一张图展现DPSK的调制解调原理,再按照模块介绍Verilog的实现 ...

随机推荐

  1. Uva 2319

    理解:区域覆盖.假设该点在勘测半圆的边缘,求出与该点可在一个半圆的坐标范围l,r,然后,for 一次判断 #include<cstdio> #include<algorithm> ...

  2. linux c 笔记-2 Hello World & main函数

    按照惯例撸一个hello_world.c #include <stdio.h> int main(int argc, char * argv[]) { printf("hello ...

  3. 在MVC中实现文件的上传

    @using (Html.BeginForm("daoru", "Excel", FormMethod.Post, new { enctype = " ...

  4. SQL/T-SQL实例参考

    ,D.[Score] B_Score ,'Distince'= CASE WHEN C.Score > D.Score THEN C.[Score] - D.[Score] WHEN C.Sco ...

  5. HttpClient, HttpClientHandler, and WebRequestHandler Explained

    原文地址 https://blogs.msdn.microsoft.com/henrikn/2012/08/07/httpclient-httpclienthandler-and-webrequest ...

  6. HTML5实现网页的全屏切换

    使用HTML5提供的JavaScript Api可以实现主流浏览器的全屏和退出全屏操作,封装成进入全屏和退出全屏的函数如下: //进入全屏 function enterFullScreen() { v ...

  7. Java 自动装箱、拆箱机制及部分源码分析

    Integer i = 10; //装箱,反编译后发现调用Integer.valueOf(int i) int t = i; //拆箱,反编译后发现调用i.intValue() public clas ...

  8. SSO 单点登录实现

    .NET基于Redis缓存实现单点登录SSO的解决方案 http://www.cnblogs.com/yinrq/p/5276628.html 共享cookie的方案 http://www.codep ...

  9. TFS二次开发系列:五、工作项查询

    本节将讲述如何查询工作项,用于二次开发中定义获取工作项列表. 使用WorkItemStore.Query方法进行查询工作项,其使用的语法和SQL语法类似: Select [标题] from worki ...

  10. 懵逼的闭包--for循环(转)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...