gojs绘流程图
引用: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绘流程图的更多相关文章
- 基于GOJS绘制流程图
基于GOJS封装的流程图设计(展示)工具类,主要分为两个工具类: 工具库依赖于go.js.jquery以及layer.js http://gojs.net/ http://jquery.com/ ht ...
- Spring配置类深度剖析-总结篇(手绘流程图,可白嫖)
生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...
- 手绘流程图,教你WSL2与Docker容器无缝互相迁移
摘要:本文主要介绍WSL2与Docker容器无缝迁移镜像. 本文分享自华为云社区<WSL2与Docker容器,无缝互相迁移>,作者: tsjsdbd . 注:本文提到的WSL都是指WSL2 ...
- 数据可视化-gojs插件使用技巧总结
随着云计算时代的到来,由于Web技术的快速革新以及为了提供高质量的用户体验,数据可视化成为了前端技术发展的一大方向.为了解决这个问题,现如今涌现了很多优秀的第三方的javascript图形库,比如hi ...
- 软工+C(2017第3期) 超链接
// 上一篇:分数和checklist // 下一篇:Alpha/Beta换人 注:平常看文章,总有能和构建之法,软件工程相关的链接,增量记录,也可以通过在其他人博客的交流中使用相关的超链接,在使用中 ...
- 软工+C(3): 超链接
// 上一篇:分数和checklist // 下一篇:Alpha/Beta换人 注:平常看文章,总有能和构建之法,软件工程相关的链接,增量记录,也可以通过在其他人博客的交流中使用相关的超链接,在使用中 ...
- Orleans的入门教程
Orleans的入门教程 官方Hello World 地址 https://github.com/dotnet/orleans/tree/master/Samples/2.0/HelloWorld ...
- PBFT 算法 java实现(下)
PBFT 算法的java实现(下) 在上一篇博客中(如果没有看上一篇博客建议去看上一篇博客),我们介绍了使用Java实现PBFT算法中节点的加入,view的同步等操作.在这篇博客中,我将介绍PBFT算 ...
- DPSK通信系统的FPGA实现
之前接触过一些FPGA的相关知识,借着实现一个简单的DPSK系统,顺便复习和记录一下Verilog HDL的简单使用方法.准备直接用一张图展现DPSK的调制解调原理,再按照模块介绍Verilog的实现 ...
随机推荐
- 第三次个人作业—“K米”评测
第一部分 调研,评测 评测 1.上手体验: 软件欢迎界面,色彩对比鲜明,前三图深色调,最后一条则充满了艳丽的色彩,让人对这个产品突然充满了期待. 软件界面加载速度慢,很多地方点击进去要等好久才能出现界 ...
- 设计模式--5.5 代理模式-通用代码及aop
1.通用代码 (1)Subjects package com.design.代理模式.通用代码; public interface Subject { void request(); } (2)Rea ...
- [BZOJ3173][Tjoi2013]最长上升子序列
[BZOJ3173][Tjoi2013]最长上升子序列 试题描述 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上 ...
- Java 23种设计模式 (通俗易懂解释收集整理)
(补充中...) P02 抽象工程模式 P14 TemplateMethod 模板方法模式 讲清楚了为什么叫做模板方法 http://www.cnblogs.com/java-my-life/arc ...
- Windows请求连接 Vmware+Ubuntu14被拒绝 的幽怨诉说
最近为了学习Linux,在电脑上装了Vmware然后搭建了Ubuntu14的Linux操作系统 搭建完成以后,我兴冲冲的使用TeraTerm进行友情访问发现被拒绝,我很郁闷. 怎么可以这样呢. 然后调 ...
- ecshop商品子分类点击下拉,子分类空时,直接跳转功能
模板文件循环读取商品分类,并给大分类加上url属性.然后在js中判断是否有下级分类.有分类则点击下拉效果,没有子分类则跳转到url属性的链接去. themes/**/library/category_ ...
- HikariCP
HiKariCP是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他连接池. 为何要使用HiKariCP?这要先从BoneCP说起: 什么?不是有C3P0/DBCP这些成熟的数据库连接池吗 ...
- MySQL 5.7 学习:新增配置参数
背景: 继上次介绍 初识 MySQL 5.6 新功能.参数完之后,刚好MySQL 5.7又GA了,在官方测试里看到,MySQL5.7在功能.性能.可用性.安全和监控上又提升了很高.现在看看和MySQL ...
- SQL中rowcount与@@rowcount
rowcount的用法: rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例, select * from 表A 这样的查询只会返回表A中的前10条数据.它和 ...
- Hotaru's problem(hdu 5371)
题意:给出一个数字串,询问最长的子串,满足以下要求:将子串平均分为三部分,一三部分相等,一二部分对衬. /* 在manachar的基础上,枚举回文串的中心,再找第三部分. */ #include< ...