GO.JS api整理

  • 画布定义
    • 布局
    • 画布的监听事件
    • node api
    • link Api
    • go.js 监听事件
    • 基础事件
    • 右键菜单(contextMenu)

画布定义

go.js api【Constructors】

const diagram = $(go.Diagram, this.$refs.myDiagram,{// 画布初始位置initialContentAlignment: go.Spot.Center,// 画布位置,定义后就不能拖动画布了contentAlignment:go.Spot.Center,// 自定义初始坐标initialPosition: new go.Point(0, 0),// 是否只读isReadOnly: false,// 画布比例scale:1.5,// 画布比例 go.Diagram.Uniform(自适应) / Diagram.UniformToFill(自适应) / go.Diagram.None(不自适应)autoScale: go.Diagram.Uniform,// 画布最小比例minScale: 0.5,// 画布最大比例maxScale:2.0,// 禁止移动节点allowMove:false,// 禁止复制allowCopy: false,// 禁止选中allowSelect:false,// 禁止删除allowDelete:false,// 禁止缩放allowZoom: false,// 禁止水平拖动画布 禁止水平滚动条allowHorizontalScroll: false,// 禁止垂直拖动画布 禁止垂直滚动条allowVerticalScroll: false,// 获取或设置用户是否可以进行就地文本编辑allowTextEdit: false,// 画布节点连线定义  CycleDestinationTree /  CycleNotUndirected / CycleNotDirected / CycleSourceTree / CycleAll// CycleDestinationTree:  只允许有一个父节点 如(禁止 a->c, b->c)// CycleNotUndirected: 节点的有效链接不会在图中产生无向循环 如(禁止a->b->c->a)// CycleNotDirected:  节点的有效链接不会在图中产生有向循环// CycleSourceTree: 一个节点只允许有一个子节点并且没有定向循环 如(禁止a->b,a->c)// CycleAll: 默认无限制validCycle: go.Diagram.CycleDestinationTree,// 禁止撤销和重做"undoManager.isEnabled": false,// 画布初始化动画时间"animationManager.duration": 600,// 禁止画布初始化动画"animationManager.isEnabled": false,// 显示网格"grid.visible":true,// 网格大小"grid.gridCellSize":new go.Size(15,15),// 禁止鼠标拖动区域选中"dragSelectingTool.isEnabled" : false,// 允许Ctrl-G调用groupSelection命令"commandHandler.archetypeGroupData": { text: "Group",isGroup: true, color: "blue"},// 键盘复制命令"commandHandler.copiesTree": true,// 键盘删除命令"commandHandler.deletesTree": true,// 提示显示的速度有多快"toolManager.hoverDelay": 100,// 鼠标滚轮缩放而不是滚动"toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom,// 拖动用于移动和复制"draggingTool.dragsTree": true,// 允许在后台双击创建一个新节点"clickCreatingTool.archetypeNodeData": { text: "Node" },// 布局layout: {}}
)

布局

  1. 网格布局 go.GridLayout
  2. 力导向布局 go.ForceDirectedLayout
  3. 树形布局 go.TreeLayout
  4. 径向布局(需要引RadialLayout.js) RadialLayout
layout: $(go.GridLayout,
{// 设置从小到大排序,可以从写方法,自定义算法进行布局comparer: go.GridLayout.smartComparer,// 设置节点间隔spacing: go.Size.parse("20 20"),
})

画布的监听事件

  1. 线生成事件 LinkDrawn
  2. 线重新连接事件 LinkRelinked
  3. 删除后事件 SelectionDeleted
  4. 删除前事件 SelectionDeleting
  5. 节点移动事件 SelectionMoved
diagram.addDiagramListener("SelectionDeleted", function(e) {e.subject.each(function(n){console.log('当前节点-----',n.data.key);});
})

node api

node api文档

diagram.nodeTemplateMap.add("有多个节点模板时用来与数据中的'category'属性进行匹配"$(go.Node,'元素布局定义',{// 公用属性// 节点继承Part的属性定义},$(go.Panel, // 类似创建一个div的'Auto',new go.Binding("location", "loc", go.Point.parse),$(go.Shape,'RoundedRectangle', // 设置div形状{fill: '#000', // 背景色stroke: '#fff', // 边框色width: 200, // div 高宽height: 120,},// 动态修改,值来源数据里面的color属性new go.Binding("fill", "color")),{click:function(e, node) {},// 鼠标样式cursor:"pointer"})
)

元素布局定义:

名称 描述
Auto 子元素叠加布局
Vertical 子元素垂直布局
Horizontal 子元素水平布局
Spot 子元素坐标布局
Table 子元素表格布局

公共属性:

属性 描述 属性值
minSize 最小范围' new go.Size(50, 200)
maxSize 最大范围' new go.Size(50, 200)
width
height
margin 外边距 new go.Margin(2, 0)
alignment 元素位置 go.Spot.BottomLeft(BottomRigh、TopLeft、TopRight、Left、Right、Top、Bottom、Center)
defaultAlignment 子元素位置 同上
visible 设置是元素是否可见 true、false

节点属性:

属性 描述 属性值
zOrder 节点显示层级 默认NaN,按创建顺序排序
deletable 是否可删除 true、false
movable 是否可移动 true、false
selectable 是否可选择 true、false
selectionChanged 选中状态改变时调用的函数 function(node)
selectionAdorned 显示选中边框 true、false
selectionAdornmentTemplate 自定义选中边框模版 $(go.Adornment, 'auto',$(go.Shape,{}),$(go.Placeholder))
isShadowed 是否显示阴影 true、false
shadowColor 阴影的颜色 默认gray
shadowOffset 阴影的位置偏移 new go.Point(6, 6)
copyable 是否可复制 true、false
location 节点坐标
minLocation 节点坐标最小位置
maxLocation 节点坐标最大位置
isSelected 是否选中 true、false(操作型属性无法在模板定义,只能在节点生成后操作)
reshapable 是否重绘(改变shape形状边界时使用) true、false
resizable 是否调整大小 true、false
resizeCellSize 调整的范围
rotatable 是否旋转 false,true
port 线端口设置
avoidable 线绕开经过的节点 (Link.routing 为AvoidsNodes才能使用) true / false
avoidableMargin 线绕开经过的节点的边距 new go.Margin(6,6,6,6)
linkConnected 节点线链接后调用的函数 function(node, link, port)
linkDisconnected 节点线断开后调用的函数 function(node, link, port)
isTreeExpanded 是否展开树节点的子节点 false,true
wasTreeExpanded 获取或设置从该节点开始的子节点是否被父节点上的expandTree调用折叠 false,true
isTreeLeaf 获取节点有没有子节点 false,true
treeExpandedChanged isTreeExpanded改变时调用的函数 function(node)

go.TextBlock(文本框元素):

属性 描述
stroke 文字 (边框)颜色
font 字体
editable 是否可编辑
textAlign 文本位置
minSize 文本域最小范围
maxSize 文本域最大范围
maxLines 文本显示的最大行数
isMultiline 是否允许换行
overflow 超出范围处理(go.TextBlock.OverflowEllipsis 显示缩略号 、go.TextBlock.OverflowClip 裁切)

节点、线事件

选中改变事件 selectionChanged(放在node层下面)
双击事件 doubleClick
单击事件 click
鼠标进入事件 mouseEnter
鼠标离开事件 mouseLeave
鼠标悬停事件 mouseHover

link Api

diagram.linkTemplateMap.add("",$(go.Link,{// 链路路由应避开节点routing: go.Link.AvoidsNodes,corner: 10,curve: go.Link.JumpGap }, // 记录拐点数据new go.Binding("points").makeTwoWay();// 线$(go.Shape),// 箭头$(go.Shape, { toArrow: "Standard" }))
) ;

routing 路由选择

属性 属性值
AvoidsNodes 避免节点
Normal 正常
Bezier 指示链接路径使用贝塞尔曲线
OrientAlong 图形对象的角度始终与连接图形对象所在段的链接路径的角度相同,此方向用于箭头
Orthogonal 每个段是水平或垂直的

Link 属性

属性 属性值
corner 两条线段彼此正交时相邻线段的圆角程度 (number)
curve 获取或设置从路径的点生成路径的方式(值必须是 None, Bezier, JumpGap, JumpOver)
curviness 获取或设置当线弯曲类型 curve 为 Bezier 时或同一两个端口之间存在多个链接时,控制点偏移的距离(number)
fromEndSegmentLength 从末端段长度(number)
fromSpot 获取或设置此链接应在从端口处连接的位置
toNode 获取或设置此链接转到的节点

go.js 监听事件

diagram.addDiagramListener('事件名',  function(e,obj) {})
// 如:
diagram.animationManager.initialAnimationStyle = go.AnimationManager.None;
diagram.addDiagramListener('InitialAnimationStarting', function(e) {var animation = e.subject.defaultAnimation;animation.easing = go.Animation.EaseOutExpo;animation.duration = 900;animation.add(e.diagram, 'scale', 0.1, 1);animation.add(e.diagram, 'opacity', 0, 1);
});
事件名 含义
InitialAnimationStarting 初始动画开始,default动画即将开始
AnimationStarting 动画开始
AnimationFinished 动画已完成
BackgroundSingleClicked 背景单击事件
BackgroundDoubleClicked 背景双击事件
BackgroundContextClicked 背景右键事件
ChangingSelection 更改选择
ChangedSelection 更改了选择
ClipboardChanged 剪贴板已更改
ClipboardPasted 剪贴板已暂停
DocumentBoundsChanged 文档边界已更改
ExternalObjectsDropped (节点或线等)部件拖放生成事件,外部拖入触发
GainedFocus 获得键盘焦点
InitialLayoutCompleted 初始布局已完成
LayoutCompleted 整个图表布局已完成
LinkDrawn 线创建完成事件
LinkRelinked 线重新链接事件
ObjectSingleClicked 单击事件, 图形对象GraphObject上的单击
ObjectDoubleClicked 双击事件,图形对象GraphObject上的双击
ObjectContextClicked 右键事件,图形对象GraphObject上的右键
PartResized Part大小改变事件(通过ResizingTool改变了一个GraphObject的大小)
PartRotated Part旋转事件
SelectionMoved 拖动事件
SelectionCopied 复制事件
SelectionDeleting 删除前事件
SelectionDeleted 删除后事件
SelectionGrouped 新建组事件
SelectionUngrouped 删除组事件
SubGraphCollapsed 子图折叠事件
SubGraphExpanded 子图展开事件
TextEdited 文本快修改事件
TreeCollapsed 树折叠事件
TreeExpanded 树展开事件

监听数据变化

diagram.raiseChangedEvent(function(change, propertyname, obj, oldval, newval, oldparam, newparam){});

基础事件

阻止键盘事件(添加自己的键盘绑定,重写commandHandler.doKeyDown 方法)

diagram.commandHandler.doKeyDown = function () {var e = diagram.lastInput;var cmd = myDiagram.commandHandler;// 检查一下e.control或e.shiftif (e.key === "T") { if (cmd.canCollapseSubGraph()) {cmd.collapseSubGraph();} else if (cmd.canExpandSubGraph()) {cmd.expandSubGraph();}} else {// 调用base方法,不带参数(不调用其他的将会失效)go.CommandHandler.prototype.doKeyDown.call(cmd);}};

commandHandler指令

diagram.commandHandler.deleteSelection()  // Del删除
diagram.commandHandler.cutSelection()  // Ctrl-X 剪切
diagram.commandHandler.copySelection()  // Ctrl-C复制
diagram.commandHandler.pasteSelection()  // Ctrl-V粘贴
diagram.commandHandler.selectAll()  // Ctrl-A全选
diagram.commandHandler.undo()  // Ctrl-Z 取消
diagram.commandHandler.redo()  // Ctrl-Y重做
diagram.Diagram.scroll()  // 向上 & 向下 & 向左 & 向右 & 翻页 & 下页 & 首页 &结束(箭头键)
diagram.commandHandler.scrollToPart()  // 空格键 滚动到部件
diagram.commandHandler.decreaseZoom()  //  减号 缩小
diagram.commandHandler.increaseZoom()  // 加号 放大
diagram.commandHandler.resetZoom()  // 重置zoom
diagram.commandHandler.zoomToFit()  // 设置合适的图形大小
diagram.commandHandler.ungroupSelection()  // 取消组合
diagram.commandHandler.editTextBlock()  // 编辑
diagram.commandHandler.stopCommand()  // 取消

拖拽框选功能

diagram.toolManager.dragSelectingTool.box =$(go.Part,{ layerName: "Tool", selectable: false },$(go.Shape,{ name: "SHAPE", fill: null, stroke: "chartreuse", strokeWidth: 3 }));

监听新拖拽到画布的节点

diagram.addModelChangedListener(function(evt) {// ignore unimportant Transaction eventsif (!evt.isTransactionFinished) return;var txn = evt.object;  // a Transactionif (txn === null) return;// iterate over all of the actual ChangedEvents of the Transactiontxn.changes.each(function(e) {// ignore any kind of change other than adding/removing a nodeif (e.modelChange !== "nodeDataArray") return;// record node insertions and removalsif (e.change === go.ChangedEvent.Insert) {console.log(evt.propertyName + " added node with key: " + e.newValue.key);} else if (e.change === go.ChangedEvent.Remove) {console.log(evt.propertyName + " removed node with key: " + e.oldValue.key);}});});

监听新拖拽的连线

diagram.addModelChangedListener(function(evt) {// ignore unimportant Transaction eventsif (!evt.isTransactionFinished) return;var txn = evt.object;  // a Transactionif (txn === null) return;// iterate over all of the actual ChangedEvents of the Transactiontxn.changes.each(function(e) {// record node insertions and removalsif (e.change === go.ChangedEvent.Property) {if (e.modelChange === "linkFromKey") {console.log(evt.propertyName + " changed From key of link: " +e.object + " from: " + e.oldValue + " to: " + e.newValue);} else if (e.modelChange === "linkToKey") {console.log(evt.propertyName + " changed To key of link: " +e.object + " from: " + e.oldValue + " to: " + e.newValue);}} else if (e.change === go.ChangedEvent.Insert && e.modelChange === "linkDataArray") {console.log(evt.propertyName + " added link: " + e.newValue);} else if (e.change === go.ChangedEvent.Remove && e.modelChange === "linkDataArray") {console.log(evt.propertyName + " removed link: " + e.oldValue);}});});

大小网格交替线

 grid: $(go.Panel, "Grid",$(go.Shape, "LineH", { stroke: "gray", strokeWidth: .5 }),$(go.Shape, "LineH", { stroke: "darkslategray", strokeWidth: 1.5, interval: 10 }),$(go.Shape, "LineV", { stroke: "gray", strokeWidth: .5 }),$(go.Shape, "LineV", { stroke: "darkslategray", strokeWidth: 1.5, interval: 10 })),

查找该节点的下一级节点 , 双击节点可以拿到节点的 index

index.findNodesOutOf()

通过key值去查找节点

myDiagram.findNodeForKey(key).data //key值是节点的key

找当前节点的下一连线,上一连线是findLinksInto

index.findLinksOutOf.xc.n[0].zd //n是个数组,里面是所有线

更新节点数据,参数是你当前编辑的节点数据

myDiagram.model.updateTargetBindings(node.data)

限制palette拖拽区域,防止出现动态滚动条

autoScrollRegion:0,
hasVerticalScrollbar:false,
hasHorizontalScrollbar:false

获取页面选中的节点

myDiagram.selectedNode()

去除画布的蓝色默认border

canvas{border:0px;outline:none;
}

右键菜单(contextMenu)

右键菜单添加外边框

contextMenu: $("ContextMenu", "Auto",{background: "white",},$(go.Shape, "Rectangle",{stroke: "black",strokeWidth: 15,},),$(go.Panel, "Vertical",$("ContextMenuButton",{"ButtonBorder.fill": "white","_buttonFillOver": "#E9F5FF","_buttonFillPressed": "red",visible: true,desiredSize: new go.Size(100, 50)},$(go.TextBlock, {text: "删除",textAlign: "center",verticalAlignment: go.Spot.Center,}),

ContextMenuButton样式

"ButtonBorder.fill" // 按钮背景填充
"ButtonBorder.stroke" // 按钮边框色
"ButtonBorder.strokeWidth" // 按钮边框条宽
"_buttonFillPressed" // 按钮按下背景填充色
"_buttonStrokePressed" // 按钮按下边框色
"_buttonFillOver" // 按钮悬停背景填充色
"_buttonStrokeOver" // 按钮悬停边框色

去除水印的方法是:在go.js文件中搜索关键字:7eba17a4ca3b1a8346
a.Kv=d[w.Jg(“7eba17a4ca3b1a8346”)]w.Jg(“78a118b7”);替换为a.Kv =function(){return true;}

【go.js 常用api管理】相关推荐

  1. three.js 常用api

    three.js 常用api 场景 创建场景 var scene = new THREE.Scene(); 插入场景 scene.add(x); 相机 正交投影相机 var camera = new ...

  2. js find的用法_React常用库Immutable.js常用API

    JavaScript 中的对象一般是可变的(Mutable),因为使用了引用赋值,新的对象简单的引用了原始对象,改变新的对象将影响到原始对象.如 foo={a: 1}; bar=foo; bar.a= ...

  3. JS常用API(结合代码案例简单易懂)

    API:应用程序编程接口,在JS下表示预定义的函数和方法,可以直接调用功能. 目录 一.数组API 二.字符串API 三.MathAPI 如何学习一个API:   作用.参数.返回值 学习数组API还 ...

  4. 原生js获取document_原生JS常用API整理

    Anchor 对象:指HTML超链接 1.修改一个链接的文本,链接和target //html部分 访问 Microsoft 改变超链接的文本和 URL.也改变 target 属性.target 属性 ...

  5. 介绍几款常用的在线API管理工具

    在项目开发过程中,总会涉及到接口文档的设计编写,之前使用的都是ms office工具,不够漂亮也不直观,变更频繁的话维护成本也更高,及时性也是大问题.基于这个背景,下面介绍几个常用的API管理工具,方 ...

  6. Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性  应该内置到语言里面...

    Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性  应该内置到语言里面 1. 常用算法1 1.1. 目录2 1.2. 定义和用法编辑2 1.3 ...

  7. 【Day.js】一个轻量2KB的处理时间和日期的JavaScript 库,常用API记录与分享

    关于时间的操作,一直在使用momentjs这个库.方便灵巧,功能强大.唯一的缺点:包大小为200K.精简的方案:如dayjs和miment. dayjs本身就是对标momentjs进行开发的: Day ...

  8. Js常用数组常用API

    JS对数组进行操作的常用API JS中提供了非常多的对数组进行操作的API,这里给出一些个人用到的API,仅供参考. 能够对原数组进行修改的API共有7个: shift,pop , unshift,p ...

  9. 从0到一开发微信小程序(6)—小程序常用API

    文章目录 其他相关文章 1.小程序API 1.1.路由 1.1.1.navigateTo(保留当前页面,跳转到应用内的某个页面,可以带参数) 1.1.2.redirectTo(关闭当前页面,跳转到应用 ...

最新文章

  1. 世界在音乐中得到了完整的再现和表达。
  2. vaadin 10+_Vaadin 10+作为CUBA UI的未来
  3. python语言的单行注释以井号开头_【学习】Python语言入门
  4. 安卓发布应用、更新的细节
  5. 通过 MySQL 二进制日志恢复删除的记录
  6. 检察日报:需从预防犯罪视角对私人数字货币实施刑法规制
  7. PHP 微信公众号之客服完整讲解
  8. linux查找启动程序的路径
  9. Xshell利用密钥远程登录Linux
  10. mysql计算指定的时间TPS
  11. 【图论】Dijkstra算法解决有向图最短路问题
  12. 【医学图像分割】 基于matlab GVF算法医学图像分割【含Matlab源码 1213期】
  13. 豆丁网怎么免费下载付费文档(doc,ppt,xlsx...)
  14. 马克思主义基本原理知识框架图——政治经济学中各种资本的划分
  15. 利用canvas制作水印(兼容移动端哦)
  16. 如何通过Facebook主页获得用户的邮箱
  17. windows操作系统未关闭默认共享
  18. 求职互联网技术岗应届生面试必备技巧分享
  19. unity protobuf使用repeated字段转c#文件后List只读问题
  20. 轻松下载Spotify上的音乐(mp3格式)

热门文章

  1. php二维数组 转一维,php二维数组转一维数组方法
  2. Adobe After Effects CS6 安装教程(简体中文)
  3. 高效液相色谱在材料测试中的定性定量方法
  4. 虚拟歌手“成团出道”,作曲人、歌手要失业了?道翰天琼认知智能。
  5. 计算机二级科目怎么学,计算机二级科目选择
  6. 怎么做好网络营销推广?
  7. unity读取灰度图生成等值线图
  8. Skipped 30 frames! The application may be doing too much work on its main thread.
  9. shanzhi - 学习变量的使用
  10. 银行的借记卡和信用卡的区别