交互
阅读时间约 5 分钟
交互(Behavior)是 G6 的核心构建模块,它精确定义了用户与图之间的互动行为。每个 Behavior 插件都是一个高度封装的功能单元,内部集成了特定场景下的事件监听、状态管理和响应处理逻辑。
G6 的内置 Behavior 涵盖了大多数常见交互需求,同时提供了灵活的扩展机制,支持开发者根据业务场景构建定制化交互体验。 有关完整的交互行为类型、配置选项及开发示例,请参阅 交互总览 章节。
获取当前图表中所有已配置的交互行为。
getBehaviors(): BehaviorOptions;
返回值
示例
// 获取当前所有交互行为const behaviors = graph.getBehaviors();console.log('当前图表的交互行为:', behaviors);
设置图表的交互行为,将替换所有现有的交互行为。
setBehaviors(behaviors: BehaviorOptions | ((prev: BehaviorOptions) => BehaviorOptions)): void;
参数
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
behaviors | 新的交互行为配置,或一个基于当前配置返回新配置的函数 | BehaviorOptions | (prev: BehaviorOptions) => BehaviorOptions | - | ✓ |
说明
设置的交互会全量替换原有的交互,如果需要新增交互可以使用函数式更新:
graph.setBehaviors((behaviors) => [...behaviors, { type: 'zoom-canvas' }]);
示例 1: 设置基本交互
// 设置基本交互graph.setBehaviors(['drag-canvas', // 拖拽画布'zoom-canvas', // 缩放画布'drag-element', // 拖拽元素]);
示例 2: 设置带配置的交互
graph.setBehaviors([// 字符串形式(使用默认配置)'drag-canvas',// 对象形式(自定义配置){type: 'zoom-canvas',key: 'my-zoom', // 指定唯一标识,用于后续更新sensitivity: 1.5, // 缩放灵敏度},// 只有节点上启用拖拽{type: 'drag-element',key: 'drag-node-only',enable: (event) => event.targetType === 'node', // 仅在节点上启用拖拽},]);
示例 3: 使用函数式更新
// 添加新的交互行为graph.setBehaviors((currentBehaviors) => [...currentBehaviors,{type: 'brush-select',key: 'selection-brush',},]);// 替换特定交互行为graph.setBehaviors((currentBehaviors) => {// 过滤掉现有的缩放交互const filteredBehaviors = currentBehaviors.filter((behavior) => {if (typeof behavior === 'string') return behavior !== 'zoom-canvas';return behavior.type !== 'zoom-canvas';});// 添加新的缩放交互配置return [...filteredBehaviors,{type: 'zoom-canvas',key: 'new-zoom',enableOptimize: true,},];});
更新指定的交互行为配置,需要通过 key
标识要更新的交互。
updateBehavior(behavior: UpdateBehaviorOption): void;
参数
参数 | 描述 | 类型 | 默认值 | 必选 |
---|---|---|---|---|
behavior | 更新的交互行为配置 | UpdateBehaviorOption | - | ✓ |
说明
如果要更新一个交互,必须在原始交互配置中指定 key
字段,以便能够准确找到并更新该交互。
示例 1: 更新交互配置
// 初始设置交互时指定 keygraph.setBehaviors([{type: 'zoom-canvas',key: 'my-zoom-canvas',sensitivity: 1.0,},]);// 更新交互配置graph.updateBehavior({key: 'my-zoom-canvas', // 指定要更新的交互sensitivity: 2.0, // 新的缩放灵敏度enableOptimize: true, // 添加新配置});
示例 2: 禁用/启用交互
// 设置带 key 的行为graph.setBehaviors([{type: 'drag-canvas',key: 'main-drag',},{type: 'zoom-canvas',key: 'main-zoom',},]);// 禁用拖拽功能graph.updateBehavior({key: 'main-drag',enable: false,});// 稍后重新启用setTimeout(() => {graph.updateBehavior({key: 'main-drag',enable: true,});}, 5000);
type BehaviorOptions = (string | CustomBehaviorOption | ((this: Graph) => CustomBehaviorOption))[];type CustomBehaviorOption = {// 交互类型type: string;// 交互 key,即唯一标识,用于标识交互,从而进一步操作此交互key?: string;// 针对不同类型的交互,还可能有其他配置项[configKey: string]: any;};
type UpdateBehaviorOption = {// 要更新的交互的唯一标识key: string;// 其他要更新的配置项[configKey: string]: unknown;};