引用: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对象。许
多预定义的工具和命令执行,大部分的图表所需要的标准的行为。外观和行为的定制是大多设置属性的问题

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. Scrum Meeting ——总结

    冲刺总结 0*.燃尽图 迟来的燃尽图,别看它是最后一天掉了一堆,感觉很假,像是人为的把issues都关闭掉.其实不然,很多功能是大家平时做好,但是没整合在一起,所以没燃掉,在最后几天的整合中,通过测试 ...

  2. GitHub使用教程

    一直以来都想使用Git来管理自己平时积累的小代码,就是除了工作之外的代码了.有时候自己搞个小代码,在公司写了,就要通过U盘或者网盘等等一系列工具进行Copy,然后回家才能继续在原来的基础上作业.Cop ...

  3. 开大你的音响,感受HTML5 Audio API带来的视听盛宴

    话说HTML5的炫酷真的是让我爱不释手,即使在这个提到IE就伤心不完的年代.但话又说回来,追求卓越Web创造更美世界这样高的追求什么时候又与IE沾过边儿呢?所以当你在看本文并且我们开始讨论HTML5等 ...

  4. 【GWAS文献解读】疟原虫青蒿素抗药性的全基因组关联分析

    英文名:Genetic architecture of artemisinin-resistant Plasmodium falciparum 中文名:疟原虫青蒿素抗药性的全基因组关联分析 期刊:Na ...

  5. Mybatis在insert操作时返回主键

    今天在写项目的时候,遇到一个需求,就是在像数据库插入数据的时候,要保留插入数据的主键,以便后续进行级联时,可以将该主键作为另张表的外键. 但是在正常情况下我们使用插入语句返回的是int型,含义是影响该 ...

  6. WSME api controller嵌套使用wtypes

    # 定义user类型和user列表类型 from wsme import types as wtypes class User(wtypes.Base): name = wtypes.text age ...

  7. 各大安卓应用市场APP上传提交与收录

    360 提交网址 应用宝 提交网址 百度 提交网址 91 提交网址 安卓 提交网址 PP助手 提交网址 小米 提交网址 华为 提交网址 OPPO 提交网址 魅族 提交网址 乐视 提交网址 豌豆荚 提交 ...

  8. POJ 2337 Catenyms(有向图的欧拉通路)

    题意:给n个字符串(3<=n<=1000),当字符串str[i]的尾字符与str[j]的首字符一样时,可用dot连接.判断用所有字符串一次且仅一次,连接成一串.若可以,输出答案的最小字典序 ...

  9. 程序中使用ajax时,type为put,或者delete时在 IIS上没效果,发生HTTP Error 405.0 - Method Not Allowed

    其实使用put delete  是在创建webapi中基本才会使用. WebDAV 是超文本传输协议 (HTTP) 的一组扩展,为 Internet 上计算机之间的编辑和文件管理提供了标准.利用这个协 ...

  10. 这两年在QQGame写过的游戏(2012.7.15-2014.8.25)

    [雷电]  Gamebryo         http://qqgamecdnimg.qq.com/help/rule177.html [英雄杀]          http://yxs.qq.com ...