基础事件 Event
本章介绍的事件可以通过 graph.on 与 graph.off 进行绑定/解绑监听函数。
通用事件、Node 事件、Edge 事件及 Canvas 事件回调的参数请参考 Behavior API。
交互事件
使用如下形式进行交互事件的监听:
graph.on(eventName, evt => {
// 一些操作
})其中,事件对象 evt 的属性值有:
type: 事件类型name: 事件名称x: 画布上的 x 坐标y: 画布上的 y 坐标clientX: 浏览器窗口上的 x 坐标clientY: 浏览器窗口上的 y 坐标canvasX: 画布父容器视口上的 x 坐标canvasY: 画布父容器视口上的 y 坐标
(x/y,clientX/clientY,canvasX/canvasY 三套坐标系详解见 F6 坐标系深度解析)
item: 事件的触发元素(节点/边/ Combo)target: 事件的触发图形 Shape 或画布对象bubbles: 是否允许冒泡defaultPrevented: 是否阻止了原生事件originalEvent: 原始浏览器事件对象timeStamp: 触发事件的时间propagationStopped: 是否阻止传播(向上冒泡)propagationPath: 触发事件的路径
eventName 见下方内容。
通用交互事件
| 事件名称 | 描述 |
|---|---|
| tap | 点击设备屏幕 |
| dbltap | 快速点击两次设备屏幕 |
| dragstart | 当拖拽元素开始被拖拽的时候触发的事件,此事件作用在被拖曳元素上 |
| drag | 当拖拽元素在拖动过程中时触发的事件,此事件作用于被拖拽元素上 |
| dragend | 当拖拽完成后触发的事件,此事件作用在被拖曳元素上 |
| dragenter | 当拖曳元素进入目标元素的时候触发的事件,此事件作用在目标元素上 |
| dragleave | 当拖曳元素离开目标元素的时候触发的事件,此事件作用在目标元素上 |
| drop | 被拖拽的元素在目标元素上同时放开触发的事件,此事件作用在目标元素上 |
| panstart | 当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发 |
| panmove | 当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,调用 preventDefault() 事件可以阻止滚动。 |
| panend | 当手指从屏幕上离开的时候触发 |
Node 交互事件
| 事件名称 | 描述 |
|---|---|
| node:tap | 点击设备屏幕触发 |
| node:dbltap | 快速双击屏幕触发 |
| node:dragstart | 当节点开始被拖拽的时候触发的事件,此事件作用在被拖曳节点上 |
| node:drag | 当节点在拖动过程中时触发的事件,此事件作用于被拖拽节点上 |
| node:dragend | 当拖拽完成后触发的事件,此事件作用在被拖曳节点上 |
| node:dragenter | 当拖曳节点进入目标元素的时候触发的事件,此事件作用在目标元素上 |
| node:dragleave | 当拖曳节点离开目标元素的时候触发的事件,此事件作用在目标元素上 |
| node:dragover | 当拖曳节点在另一目标元素上移动时触发此事件,此事件作用在目标元素上 |
| node:drop | 被拖拽的节点在目标元素上同时放开触发的事件,此事件作用在目标元素上 |
| node:panstart | 在触控屏上,当节点开始被触碰的时候触发的事件 |
| node:panmove | 在触控屏上,当节点开始被触碰过程中触发的事件 |
| node:panend | 在触控屏上,当节点开始被触碰结束的时候触发的事件 |
Edge 交互事件
| 事件名称 | 描述 |
|---|---|
| edge:tap | 点击设备屏幕触发 |
| edge:dbltap | 快速双击屏幕触发 |
| edge:dragenter | 当拖曳元素进入目标边元素的时候触发的事件,此事件作用在目标边元素上 |
| edge:dragleave | 当拖曳元素离开目标边元素的时候触发的事件,此事件作用在目标边元素上 |
| edge:dragover | 当拖曳元素在另一目标边上移动时触发此事件,此事件作用在目标边元素上 |
| edge:drop | 被拖拽的元素在目标边元素上同时放开触发的事件,此事件作用在目标边元素上 |
Combo 交互事件
Combo 继承所有 Node 事件。
Canvas 交互事件
| 事件名称 | 描述 |
|---|---|
| canvas:tap | 点击画布时触发 |
| canvas:dbltap | 双击画布时触发 |
| canvas:dragstart | 当画布开始被拖拽的时候触发的事件,此事件作用在被拖曳画布上 |
| canvas:drag | 当画布在拖动过程中时触发的事件,此事件作用于被拖拽画布上 |
| canvas:dragend | 当拖拽完成后触发的事件,此事件作用在被拖曳画布上 |
| canvas:dragenter | 当拖曳画布进入目标元素的时候触发的事件,此事件作用在目标画布上 |
| canvas:dragleave | 当拖曳画布离开目标元素的时候触发的事件,此事件作用在目标画布上 |
| canvas:drop | 被拖拽的元素在空白画布上同时放开触发的事件,此事件作用在目标画布上 |
| canvas:panstart | 在触控屏上,当画布开始被触碰的时候触发的事件 |
| canvas:panmove | 在触控屏上,当画布开始被触碰过程中触发的事件 |
| canvas:panend | 在触控屏上,当画布开始被触碰结束的时候触发的事件 |
时机事件
用于监听图的某方法调用前后的时机。使用如下形式进行交互事件的监听:
graph.on(timingEventName, evt => {
// 一些操作
})timingEventName 见下方内容。
| 事件名称 | 描述 |
|---|---|
| beforerender | 调用 graph.render / graph.read 方法之前触发 |
| afterrender | 调用 graph.render / graph.read 方法之后触发 |
| beforeadditem | 调用 graph.add / graph.addItem 方法之前触发 |
| afteradditem | 调用 graph.add / graph.addItem 方法之后触发 |
| beforeremoveitem | 调用 graph.remove / graph.removeItem 方法之前触发 |
| afterremoveitem | 调用 graph.remove / graph.removeItem 方法之后触发 |
| beforeupdateitem | 调用 graph.update / graph.updateItem 方法之前触发 |
| afterupdateitem | 调用 graph.update / graph.updateItem 方法之后触发 |
| beforeitemvisibilitychange | 调用 graph.showItem / graph.hideItem 方法之前触发 |
| afteritemvisibilitychange | 调用 graph.showItem / graph.hideItem 方法之后触发 |
| beforeitemstatechange | 调用 graph.setItemState 方法之前触发 |
| afteritemstatechange | 调用 graph.setItemState 方法之后触发 |
| beforeitemrefresh | 调用 graph.refreshItem 方法之前触发 |
| afteritemrefresh | 调用 graph.refreshItem 方法之后触发 |
| beforeitemstatesclear | 调用 graph.clearItemStates 方法之前触发 |
| afteritemstatesclear | 调用 graph.clearItemStates 方法之后触发 |
| beforemodechange | 调用 graph.setMode / graph.addBehaviors / graph.removeBehaviors 方法之前触发 |
| aftermodechange | 调用 graph.setMode / graph.addBehaviors / graph.removeBehaviors 方法之后触发 |
| beforelayout | 布局前触发。调用 graph.render 时会进行布局,因此 render 时会触发。或用户主动调用图的 graph.layout 时触发。 |
| afterlayout | 布局完成后触发。调用 graph.render 时会进行布局,因此 render 时布局完成后会触发。或用户主动调用图的 graph.layout 时布局完成后触发。 |
| beforegraphrefreshposition | graph.refreshPositions 被调用前触发 |
| aftergraphrefreshposition | graph.refreshPositions 被调用后触发 |
| beforegraphrefresh | graph.refresh 被调用前触发 |
| aftergraphrefresh | graph.refresh 被调用后触发 |
| beforeanimate | 全局动画发生前触发 |
| afteranimate | 全局动画发生后触发 |
| beforecreateedge | 使用内置交互 create-edge,创建边之前触发 |
| aftercreateedge | 使用内置交互 create-edge,创建边之后触发 |
| beforecollapseexpandcombo | 当一个 combo 被收起或展开之前被触发,参数 action 指明了是收起还是展开 |
| aftercollapseexpandcombo | 当一个 combo 被收起或展开之后被触发,参数 action 指明了是收起还是展开 |
| graphstatechange | 调用 graph.updateItemState 方法之后触发 |
| afteractivaterelations | 使用了 'activate-relations' Behavior 并触发了该行为后,该事件被触发 |
| nodeselectchange | 使用了 'brush-select' , 'click-select' 或 'lasso-select' Behavior 且选中元素发生变化时,该事件被触发 |
| itemcollapsed | 在 TreeGraph 上使用了 'collapse-expand' Behavior 并触发了该行为后,该事件被触发 |
| tooltipchange | 使用了 'tooltip' 或 'edge-tooltip' Behavior 且 tooltip 的显示/隐藏被改变后,该事件被触发 |
| wheelzoom | 使用了 'zoom-canvas' Behavior 并用滚轮对图进行缩放后,该事件被触发 |
| viewportchange | 调用 graph.moveTo,graph.translate,或 graph.zoom 均会触发该事件 |
| dragnodeend | 使用了 'drag-node' Behavior,当拖动结束时,该事件被触发 |
| stackchange | 撤销/重做栈发生变化时,该事件触发 |
插件中的时机事件
TimeBar 插件:
| 事件名称 | 描述 |
|---|---|
| valuechange | 时间轴的时间范围发生变化时触发 |
| timebarstartplay | 时间轴开始播放时触发 |
| timebarendplay | 时间轴播放结束时触发 |
Tooltip 插件:
| 事件名称 | 描述 |
|---|---|
| tooltipchange | Tooltip 发生变化时触发 |
回调参数
不同时机监听事件的回调参数不同,下面针对各个自定义事件的回调参数进行说明。
beforerender / afterrender
无参数
beforeadditem
| 名称 | 类型 | 描述 |
|---|---|---|
| type | String | 当前添加的类型 |
| model | Object | item 数据模型 |
afteradditem
| 名称 | 类型 | 描述 |
|---|---|---|
| item | Item | 已经添加的 item 实例 |
| model | Object | item 数据模型 |
beforeremoveitem / afterremoveitem
| 名称 | 类型 | 描述 |
|---|---|---|
| item | Item | 要删除的 item 实例 |
beforeupdateitem / afterupdateitem
| 名称 | 类型 | 描述 |
|---|---|---|
| item | Item | 要更新的 item 实例 |
| model | Object | item 数据模型 |
beforeitemvisibilitychange / afteritemvisibilitychange
| 名称 | 类型 | 描述 |
|---|---|---|
| item | Item | 当前操作的 item 实例 |
| visible | Boolean | 是否可见,true 为可见,false 为不可见 |
beforeitemstatechange / afteritemstatechange
| 名称 | 类型 | 描述 |
|---|---|---|
| item | Item | 当前操作的 item 实例 |
| state | String | 状态 |
| enalbed | Boolean | 状态是否可用,true 可用,false 不可用 |
beforeitemstatesclear / afteritemstatesclear
| 名称 | 类型 | 描述 |
|---|---|---|
| item | Item | 当前操作的 item 实例 |
| states | Array / String | 需要批量清除的状态 |
beforemodechange / aftermodechange
| 名称 | 类型 | 描述 |
|---|---|---|
| mode | String | 当前的模式名称 |
beforeitemrefresh / afteritemrefresh
| 名称 | 类型 | 描述 |
|---|---|---|
| item | Item | 当前操作的 item 实例 |
beforelayout / afterlayout
无参数
graphstatechange
| 名称 | 类型 | 描述 |
|---|---|---|
| states | Object | 当前各个状态下的元素,格式举例 { hover: [Node, Node], selected: [ Node ] } |
afteractivaterelations
| 名称 | 类型 | 描述 |
|---|---|---|
| item | Item | 当前操作的 item 实例 |
| action | String | 当前操作名 |
nodeselectchange
| 名称 | 类型 | 描述 |
|---|---|---|
| target | Item | 当前操作的 item 实例 |
| selectedItems | Object | 当前被选中的所有 item 实例,形如 { nodes: [...], edges: [...]} |
beforecreateedge / aftercreateedge
beforecreateedge 无参数。aftercreateedge 参数如下:
| 名称 | 类型 | 描述 |
|---|---|---|
| edge | Item | 当前被创建的边实例 |
beforecollapseexpandcombo / aftercollapseexpandcombo
| 名称 | 类型 | 描述 |
|---|---|---|
| action | string | 具体的操作, 'collapse' 或 'expand' |
| combo | Item | 被操作的 combo item |
itemcollapsed
| 名称 | 类型 | 描述 |
|---|---|---|
| item | Item | 当前操作的 item 实例 |
| collapsed | Boolean | 当前操作后,操作对象的 collapsed 状态 |
tooltipchange
| 名称 | 类型 | 描述 |
|---|---|---|
| item | Item | 当前操作的 item 实例 |
| action | String | tooltip 当前是显示 'show' 还是隐藏 'hide' |
wheelzoom
| 名称 | 类型 | 描述 |
|---|---|---|
| deltaX | Number | 滚动的 x 方向,取值 1,0,-1,0 代表没有该方向的滚动 |
| deltaY | Number | 滚动的 y 方向,取值 1,0,-1,0 代表没有该方向的滚动 |
| ... 其他滚轮事件的回调参数 |
viewportchange
| 名称 | 类型 | 描述 |
|---|---|---|
| action | 'translate' / 'move' / 'zoom' | 视窗变换的类型,'translate'、'move'、'zoom' 分别标识该时机是由 graph.translate、graph.move、还是 graph.zoom 函数的调用而产生 |
| matrix | Array | 视窗变换后的图的矩阵 |
dragnodeend
| 名称 | 类型 | 描述 |
|---|---|---|
| items | Item[] | 当前操作的 item 实例 |
| targetItem | null/Node/Combo | 拖动节点结束后,节点是放到 canvas、Node 还是 Combo 上面 |
stackchange
| 名称 | 类型 | 描述 |
|---|---|---|
| redoStack | Object[] | 重做堆栈 |
| undoStack | Object[] | 撤销堆栈 |
valuechange
| 名称 | 类型 | 描述 |
|---|---|---|
| value | number[] | 时间轴当前时间范围,value[0] 为起始值,value[1] 为结束值 |
timelinestart / timelineend
无参数
tooltipchange
| 名称 | 类型 | 描述 |
|---|---|---|
| item | Item | tooltip 所关联的元素(节点/边) |
| action | 'show' / 'hide' | tooltip 当前的变化时显示还是隐藏 |