* chore: update dependencies * update jest.config.js for using `@kayahr/jest-electron-runner` * update rollup.config.js for using `@rollup/plugin-terser` * chore: add line-edge integration test * chore: done feat/cubic-edge chore: add integration test chore: add unit test(but there have several tests TODO ) * feat: v5-cubic-horizon-edge *feat: v5-cubic-horizon-edge *chore: test/unit/v5-cubic-horizon-edge *chore: test/integration/v5-cubic-horizon-edge * feat: v5-cubic-horizon-edge *feat: v5-cubic-horizon-edge *chore: test/unit/v5-cubic-horizon-edge *chore: test/integration/v5-cubic-horizon-edge fix: curve bug * chore: lint fix & use English comments * chore: change test svg link & fix cubic offset *chore: change test svg link *fix: fix the cubic offset * chore: fix rebase issue * Feat: add 'topRight' position configuration in BadgesShapes (#4624) * fix: support position config:'topRight' * add demo to reproduce bug * chore: fix rebase conflict * V5 fix label shape error (#4645) * update: update demo for bug reproduce * fix: fix the bug * v5-rect#1 (#4640) * feat: add RectNode * add: add rect test demo * add: add rect test demo * update: update RectNode with less override * update: remove 'console.log' * update: remove comment * update: remove cn comment * add: add rect-spec.ts for unit test --------- Co-authored-by: Yanyan Wang <yanyanwang93@gmail.com> * fix: implement onZoom as empty function for 3d node (#4647) * fix: implement onZoom as empty function for 3d node * chore: refine * chore: lint * add: make the error message more readable (#4666) * feat: add contextmenu event for graph canvas, node, and edge (#4675) * feat: v5-quadratic (#4656) * add: add a test demo * feat: add quadratic * add: add unit test demo * fix: add seItemState(selected、active、highlight、inactive、disable) test into spec. * chore: fix rebase conflicts * chore: done feat/cubic-edge chore: add integration test chore: add unit test(but there have several tests TODO ) * feat: v5-cubic-horizon-edge *feat: v5-cubic-horizon-edge *chore: test/unit/v5-cubic-horizon-edge *chore: test/integration/v5-cubic-horizon-edge * feat: v5-cubic-horizon-edge *feat: v5-cubic-horizon-edge *chore: test/unit/v5-cubic-horizon-edge *chore: test/integration/v5-cubic-horizon-edge fix: curve bug * chore: lint fix & use English comments * chore: trim up code format *chore: use relative import path *chore: delete unused imports *fix: fix the rebase imports * chore: fix base.ts * chore: fix rebase conflicts * chore: elint fix format --------- Co-authored-by: MaLaiXiGua <55946653+zqqcee@users.noreply.github.com> Co-authored-by: MaLaiXiGua <941107676@qq.com> Co-authored-by: Yanyan Wang <yanyanwang93@gmail.com> Co-authored-by: MaLaiXiGua <zqqcee@163.com>
3.9 KiB
title | order |
---|---|
交互模式 Mode | 3 |
什么是 Mode
用户在交互一张图时,可能由于意图不同而存在不同的交互模式,例如在编辑模式下点击节点需要弹出窗口让用户编辑,在查看模式下点击节点需要选中节点。
为了解决上述问题,G6 提供了交互模式 Mode,它是图上交互行为 Behavior 的管理机制。一个图上可以有存在多种交互模式,每个交互模式包含多种交互行为 Behavior。
例如,存在 default 和 edit 两种 mode(交互模式):
- default 模式中包含点击选中节点行为和拖拽画布行为;
- edit 模式中包含点击节点弹出编辑框行为和拖拽节点行为。
默认情况下,该图对 default 模式中的行为见效,即点击节点时节点被选中而不是弹出编辑框。用户可以通过简单的命令切换该图的行为模式到 edit 模式,则 default 模式中的行为失效,edit 交互模式中的行为起效,即点击节点将弹出编辑框。
配置 Mode
在实例化图时配置 modes
属性:
const graph = new G6.Graph({
container: 'mountNode',
width: 500,
height: 500,
modes: {
// supported behavior
default: ['drag-canvas', 'zoom-canvas'],
edit: ['click-select'],
},
});
以上是模式定义的一个例子。在图上定义了两个模式,分别是 default
,edit
。其中 default
包含两个 Behavior:'drag-canvas'
和 'zoom-canvas'
,都使用行为的默认参数。
切换 Mode
默认时 graph 会使用 default
模式 ,可以拖动和缩放画布,当需要点击选中节点时,可以通过 graph.setMode('edit')
来切换到 edit
的 Mode 。
graph.setMode('edit');
此时 graph 便支持了点击选中节点,default
模式下的拖拽画布 'drag-canvas'
、放缩画布行为 'zoom-canvas'
失效。
在调用了 setMode
方法后,G6 内部进行了以下操作:
- 解绑目前图模式的所有事件监听;
- 生成新的 Behavior ,进行事件初始化;
- 绑定新的行为对应的事件监听。
编辑已有的 Mode
如果有已经定义好的 Behavior (内置 Behavior 或 自定义 Behavior),需要把它添加到某个模式下,可以通过 graph.addBehaviors
方法;需要从某个模式中移除一些 Behavior,可以使用 graph.removeBehaviors
方法。如下示例:
// 向 default 模式中添加名为 drag-canvas 的行为,并使用行为的默认配置
graph.addBehaviors('drag-canvas', 'default');
// 从 default 模式中移除名为 drag-canvas 的行为
graph.removeBehaviors('drag-canvas', 'default');
// 向 edit 模式中添加名为 drag-canvas 的行为,并定义个性化配置
graph.addBehaviors(
{
type: 'drag-canvas',
direction: 'x',
},
'edit',
);
// 从 edit 模式中移除名为 drag-canvas 的行为
graph.removeBehaviors('drag-canvas', 'edit');
// 一次向 default 模式中添加多个行为
graph.addBehaviors(['drag-canvas', 'zoom-canvas'], 'default');
// 一次从 default 模式中移除多个行为
graph.removeBehaviors(['drag-canvas', 'zoom-canvas'], 'default');
// --------
// 更新 'default' 模式下的 behavior 'zoom-canvas'
graph.updateBehavior('zoom-canvas', { sensitivity: 1.5, enableOptimize: true}, 'default');
// 更新 'select' 模式下的 behavior 'click-select'
graph.updateBehavior('click-select', { trigger: 'ctrl' }, 'select');