import type { BaseBehaviorOptions, IWheelEvent, RuntimeContext, ShortcutKey } from '@antv/g6'; import { BasePlugin, Shortcut } from '@antv/g6'; /** * 滚动画布配置项 * * Roll Canvas Options */ export interface RollCanvas3DOptions extends BaseBehaviorOptions { enable?: boolean; /** * 按下该快捷键配合滚轮操作进行旋转 * * Press this shortcut key to rotate with the mouse wheel */ trigger?: ShortcutKey; /** * 灵敏度 * * Sensitivity */ sensitivity?: number; } /** * 滚动画布 * * Roll Canvas */ export class RollCanvas3D extends BasePlugin { static defaultOptions: Partial = { enable: true, trigger: ['wheel'], sensitivity: 1, }; private shortcut: Shortcut; private get camera() { return this.context.canvas.getCamera(); } constructor(context: RuntimeContext, options: RollCanvas3DOptions) { super(context, { ...RollCanvas3D.defaultOptions, ...options }); this.shortcut = new Shortcut(context.graph); this.bindEvents(); } private getAngle(delta: number): number { const { sensitivity } = this.options; return -(delta * sensitivity) / 10; } private onRoll = (event: IWheelEvent) => { const roll = this.camera.getRoll(); const delta = event.deltaY; this.camera.setRoll(roll + this.getAngle(delta)); }; private bindEvents() { const { trigger } = this.options; this.shortcut.unbindAll(); this.shortcut.bind([...trigger, 'wheel'], this.onRoll); } }