最近做的项目用到了gojs,使用了一段时间发现其功能特别强大,先记录下目前自己用到的把

1. 初始化画布

myDiagram =

$(go.Diagram, "myDiagramDiv",
{
});

2. 定义node 模型

myDiagram.nodeTemplate =
$(go.Node, "Vertical",
{
locationObjectName: "ICON",
zOrder:1,
locationSpot: go.Spot.Center
},
new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify), //go.Binding 数据绑定 又分为单向绑定和双向绑定

$(go.Panel, "Spot",   //go.Panel 面板 相当与div里面的外框把
$(go.Panel, "Auto",
{ name: "ICON" },
$(go.Shape,  //go.Shape 图形  有一些基础的圆 矩形 圆角矩形等 箭头
{ fill: null, stroke:null,strokeWidth:2 },
new go.Binding("fill","isHighlighted", function(h) { return h ? "#B7D3F2" : "transparent"; }).ofObject()),
$(go.Picture,  //图片
{desiredSize: new go.Size(30, 30), margin:3 },
new go.Binding("source", "type", nodeTypeImage ))
),
$(go.TextBlock,//文本框
{ alignment: go.Spot.TopRight, alignmentFocus: go.Spot.TopRight, //go.Spot.TopRight   相当于定位 在右上角
width: 50, height: 30,textAlign: "right",stroke: "#272822",font:"Bold 10px Helvetica"},
new go.Binding("text", "score"))
),

);

3.  定义线

myDiagram.linkTemplate

4.自定义一些节点模型 , 要使用自定义的节点模型 需要在json里加上 "category":"自定义节点名",

myDiagram.nodeTemplateMap.add("detail",

$(go.Node, "Horizontal"

));

5.节点点击事件

var Select_Port = null;

myDiagram.addDiagramListener("ObjectSingleClicked", function(e) {
//Select_Port = e.subject.part.data.key;    e.subject.part.data即获取到的data

});

6.画布空白即背景点击事件

myDiagram.addDiagramListener("BackgroundSingleClicked", function(e) {

});

7. 点击放大缩小画布

初始化画布时 可以设置

scale:0.7,
minScale:0.4,
maxScale:1.4

$(".enlarge").click(function(){
myDiagram.scale+=0.1;
})
$(".narrow").click(function(){
myDiagram.scale-=0.1;
})

8. 搜索节点

function searchDiagram() {
var input = document.getElementById("mySearch");
if (!input) return;
input.focus();

var regex = new RegExp(input.value, "i");

myDiagram.startTransaction("highlight search");
myDiagram.clearHighlighteds();

if (input.value) { 
var results = myDiagram.findNodesByExample({ text: regex }); // 根据需要搜索字段定义
myDiagram.highlightCollection(results);
if (results.count > 0) myDiagram.centerRect(results.first().actualBounds);
}

myDiagram.commitTransaction("highlight search");
}

搜索效果 通过isHighlighted 字段判断

new go.Binding("fill","isHighlighted", function(h) { return h ? "#B7D3F2" : "#fff"; }).ofObject()

9. 鹰眼功能

<div id="myOverviewDiv"></div>

myOverview =
$(go.Overview, "myOverviewDiv",
{ observed: myDiagram, contentAlignment: go.Spot.Center });

10. 自定义group模型

myDiagram.groupTemplate =
$(go.Group, "Auto",
{
zOrder:1,
layout: $(go.GridLayout, //网格布局
{ //angle: 90,
arrangement: go.GridLayout.LeftToRight,isRealtime: false, wrappingWidth:600 }), //wrappingWidth   最宽600px
isSubGraphExpanded: false,  //默认组是未展开的
locationSpot: go.Spot.Center,

subGraphExpandedChanged: function(group) { //子图扩展变化
if (group.isSubGraphExpanded) { // 子图展开
}
else {

}
}

},
new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
$(go.Shape, "Rectangle",
{ fill: "#ffffff",strokeWidth: 1 },
new go.Binding("stroke", "score", groupborder)
),
$(go.Placeholder,
{ padding: 10})

) // end Vertical Panel
); // end Group

11. 向 data 里追加字段  原本获取的json没有score字段但是需要用到可以追加进 nodeDataArray里 方便使用

var model = myDiagram.model;
var arr = model.nodeDataArray;
for (var i = 0; i < arr.length; i++) {
datas = arr[i];
datas.score = Math.round(Math.random()*100);
model.updateTargetBindings(datas);
}

12 . 可以给node加toolTip 实现鼠标移入提示想要显示的数据

{ // this tooltip shows the name and picture of the kitten
toolTip:
$(go.Adornment, "Auto",
)
),
{padding:10}
) // end Adornment
})

未完待续。。。

gojs 部分功能实现的更多相关文章

  1. GoJS 教程新手入门(资源整理,解决方案)

    以下几个是我在百度.谷歌 上能找到的比较全的GoJs的一些东西,希望对各位有所帮助! 如有外网网站不能访问请自行FQ GoJS官网 第一个推荐的是GoJS的一个类似于社区的问题讨论区,这里面初学者的一 ...

  2. GoJS研究,简单图表制作。

    话不多说,先上图 我在这个中加入了缩略图.鼠标放大缩小等功能. <!doctype html> <html> <head> <title>Flowcha ...

  3. JS组件系列——Gojs组件,前端图形化插件之利器

    前言:之前分享过两篇关于流程画图的前端组件,使用的jsPlumb.这个组件本身还不错,使用方便.入门简单.轻量级,但是使用一段时间下来,发现一些弊病,比如组件不太稳定,初始进入页面的时候连线的样式有时 ...

  4. GoJS学习笔记

    GoJS 和 GO 语言没有关系,它是一个用来创建交互式图表的 JavaScript 库. 基础概念 GraphObject 是所有图形是抽象基类,基本上 GoJS 中,万物皆 GraphObject ...

  5. 用gojs写的流程图demo

    领导要求,可以展开收缩子级,但是子级可以有多个父级,一开始用的dagre-d3.js,但是功能不是太全,无意中看到gojs,感觉还不错,所以拿来改了改... 代码地址:https://github.c ...

  6. 开始使用GoJS

    GoJS是一个用于实现交互式图表的JavaScript库.本页将向您展示使用GoJS的必要条件. 由于GoJS是一个依赖于HTML5功能的JavaScript库,因此您需要确保您的页面声明它是一个HT ...

  7. JS图形化插件利器组件系列 —— Gojs组件

    阅读目录 一.组件效果预览 二.初次接触 1.Gojs简介 2.使用入门 三.综合效果 1.自定义流程的使用 2.工业流程图 四.总结 正文 前言:之前分享过两篇关于流程画图的前端组件,使用的jsPl ...

  8. GoJs实现流程管理图

    GoJS是一个实现交互类图表(比如流程图,树图,关系图,力导图等等)的JS库. 可以加入诸多功能.如流程判断,节点处理等等.GOJS在设计上极大的减轻了开发人员的开发成本.

  9. (1) GoJS入门

    GoJS的官方下载,若下载失败,可尝试通过我的个人网盘分享下载. GoJS是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript 和HTML5 Canvas程序中创建流程图,且极大地 ...

随机推荐

  1. spark-调节executor堆外内存

    什么时候需要调节Executor的堆外内存大小? 当出现一下异常时: shuffle file cannot find,executor lost.task lost,out of memory 出现 ...

  2. word2vec生成后缀名model文件处理

    引入from gensim.models import word2vec 读取test02.model里面的词· model = word2vec.Word2Vec.load('test02.mode ...

  3. PAT T1001 Battle Over Cities-Hard Version

    按题意枚举每个点,建立缺少该点情况下的最小生成树,取权值最大的~ #include<bits/stdc++.h> using namespace std; ; const int inf= ...

  4. Java中对于ClassLoader类加载器 嵌套了深度技术的价值

    关于Java技术是一种不断兴起的编程语言,对于ClassLoader 是 Java 届最为神秘的技术之一,无数人被它伤透了脑筋,摸不清门道究竟在哪里.本文我带你彻底吃透 ClassLoader,让你甚 ...

  5. 为什么需要NAT,目前家庭的计算机器如何上网?(原创)

    .什么是NAT?     字面翻译网络地址转换. 2.产生的背景    解决公网IP不足的问题.    官方规定,将IP地址资源进行分类,分为ABCDE,常用ABC三类,在每类中划分出了一些私有IP供 ...

  6. Linux系统在IT行业处于什么位置

    相信每一位程序员对于linux都不陌生,不管是新入行的小白,还是有着十几年编程经验的大佬,都知道Linux在IT行业中的位置吧! 我是一名Web   JAVA开发的小白,对于初入IT行业的小白来说,工 ...

  7. python随机函数.2020.2.26

    随机生成函数: import random  //首先要引用random模板 print(random.randint(0,9))     //random的语法 random.randint(0,9 ...

  8. HackerOne去年发放超过8200万美元的赏金,联邦政府参与度大幅上涨

    2019年,由黑客驱动的漏洞赏金平台HackerOne支付的漏洞奖金几乎是前几年总和的两倍,达到8200万美元. HackerOne平台在2019年也将注册黑客数量翻了一番,超过了60万,同时全年收到 ...

  9. Centos7 安装redis及简单使用

    一.redis的介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset( ...

  10. mmap 与 munmap

    功能描述 mmap(memory map) 将一个文件或其他对象映射进内存. 文件被映射到多个page上, 若文件的大小不是所有page的大小之和, 最后一个page不被使用的空间将会被清零. mum ...