diff --git a/packages/g6-extension-3d/__tests__/demos/switch-renderer.ts b/packages/g6-extension-3d/__tests__/demos/switch-renderer.ts index 884f45fda00..a3a5e571bf2 100644 --- a/packages/g6-extension-3d/__tests__/demos/switch-renderer.ts +++ b/packages/g6-extension-3d/__tests__/demos/switch-renderer.ts @@ -1,11 +1,14 @@ import { Renderer as CanvasRenderer } from '@antv/g-canvas'; import type { NodeData } from '@antv/g6'; import { ExtensionCategory, Graph, register } from '@antv/g6'; -import { Light, Sphere, renderer } from '../../src'; +import { Light, Line3D, ObserveCanvas3D, Sphere, ZoomCanvas3D, renderer } from '../../src'; export const switchRenderer: TestCase = async (context) => { register(ExtensionCategory.PLUGIN, '3d-light', Light); register(ExtensionCategory.NODE, 'sphere', Sphere); + register(ExtensionCategory.EDGE, 'line3d', Line3D); + register(ExtensionCategory.BEHAVIOR, 'observe-canvas-3d', ObserveCanvas3D); + register(ExtensionCategory.BEHAVIOR, 'zoom-canvas-3d', ZoomCanvas3D); const nodes: NodeData[] = [{ id: '1' }, { id: '2' }]; @@ -26,10 +29,35 @@ export const switchRenderer: TestCase = async (context) => { if (name === '2d') { graph.setOptions({ renderer: () => new CanvasRenderer(), + behaviors: [ + 'zoom-canvas', + 'drag-canvas', + 'drag-element', + { + type: 'hover-activate', + degree: 1, + state: 'highlight', + }, + ], node: { type: 'circle', + state: { + highlight: { + fill: '#D580FF', + }, + }, + }, + edge: { + style: { + labelBackgroundFill: '#FFF', + labelBackground: true, + }, + }, + layout: { + type: 'force', + preventOverlap: true, + animation: false, }, - plugins: [], }); } else { graph.setOptions({ @@ -40,14 +68,32 @@ export const switchRenderer: TestCase = async (context) => { materialType: 'phong', }, }, + edge: { + type: 'line3d', + }, plugins: [ + { + type: 'camera-setting', + projectionMode: 'orthographic', + near: 1, + far: 10000, + fov: 45, + aspect: 1, + }, { type: '3d-light', directional: { direction: [0, 0, 1], }, }, + { + type: 'background', + backgroundImage: + 'url(https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*M_OaRrzIZOEAAAAAAAAAAAAADmJ7AQ/original)', + backgroundPosition: 'center', + }, ], + behaviors: ['observe-canvas-3d', 'zoom-canvas-3d'], }); } diff --git a/packages/g6/__tests__/demos/canvas-switch-renderer.ts b/packages/g6/__tests__/demos/canvas-switch-renderer.ts deleted file mode 100644 index 25cf13741d0..00000000000 --- a/packages/g6/__tests__/demos/canvas-switch-renderer.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Graph } from '@/src'; -import { Renderer as CanvasRenderer } from '@antv/g-canvas'; -import { Renderer as SVGRenderer } from '@antv/g-svg'; -import { Renderer as WebGLRenderer } from '@antv/g-webgl'; - -export const canvasSwitchRenderer: TestCase = async (context) => { - const graph = new Graph({ - ...context, - data: { - nodes: Array.from({ length: 10 }).map((_, i) => ({ id: `node-${i}` })), - }, - layout: { - type: 'grid', - }, - }); - - await graph.render(); - - canvasSwitchRenderer.form = (panel) => { - panel.add({ renderer: 'canvas' }, 'renderer', ['canvas', 'svg', 'webgl']).onChange((name: string) => { - graph.setOptions({ - renderer: () => { - if (name === 'svg') return new SVGRenderer(); - if (name === 'webgl') return new WebGLRenderer(); - return new CanvasRenderer(); - }, - }); - }); - return []; - }; - - return graph; -}; diff --git a/packages/g6/__tests__/demos/index.ts b/packages/g6/__tests__/demos/index.ts index 16dc89c354e..6a390c24ce2 100644 --- a/packages/g6/__tests__/demos/index.ts +++ b/packages/g6/__tests__/demos/index.ts @@ -19,7 +19,6 @@ export { behaviorLassoSelect } from './behavior-lasso-select'; export { behaviorOptimizeViewportTransform } from './behavior-optimize-viewport-transform'; export { behaviorScrollCanvas } from './behavior-scroll-canvas'; export { behaviorZoomCanvas } from './behavior-zoom-canvas'; -export { canvasSwitchRenderer } from './canvas-switch-renderer'; export { caseIndentedTree } from './case-indented-tree'; export { caseOrgChart } from './case-org-chart'; export { elementCombo } from './combo'; diff --git a/packages/g6/src/behaviors/drag-canvas.ts b/packages/g6/src/behaviors/drag-canvas.ts index c75b599c445..8d7ae5f548d 100644 --- a/packages/g6/src/behaviors/drag-canvas.ts +++ b/packages/g6/src/behaviors/drag-canvas.ts @@ -174,6 +174,7 @@ export class DragCanvas extends BaseBehavior { public destroy(): void { this.shortcut.destroy(); + this.unbindEvents(); this.context.canvas.setCursor(this.defaultCursor); super.destroy(); } diff --git a/packages/g6/src/behaviors/zoom-canvas.ts b/packages/g6/src/behaviors/zoom-canvas.ts index dd6ca258c39..91c3ced71e0 100644 --- a/packages/g6/src/behaviors/zoom-canvas.ts +++ b/packages/g6/src/behaviors/zoom-canvas.ts @@ -1,4 +1,4 @@ -import { clamp, isArray, isFunction, isObject } from '@antv/util'; +import { clamp, isFunction } from '@antv/util'; import { CommonEvent } from '../constants'; import type { RuntimeContext } from '../runtime/types'; import type { IKeyboardEvent, IWheelEvent, Point, PointObject, ViewportAnimationEffectTiming } from '../types'; @@ -98,15 +98,15 @@ export class ZoomCanvas extends BaseBehavior { const { trigger } = this.options; this.shortcut.unbindAll(); - if (isArray(trigger)) { - this.preventDefault(CommonEvent.WHEEL); + if (Array.isArray(trigger)) { + this.context.canvas.getContainer()?.addEventListener(CommonEvent.WHEEL, this.preventDefault); this.shortcut.bind([...trigger, CommonEvent.WHEEL], (event) => { const { deltaX, deltaY } = event; this.zoom(-(deltaY ?? deltaX), event, false); }); } - if (isObject(trigger)) { + if (typeof trigger === 'object') { const { zoomIn = [], zoomOut = [], @@ -170,12 +170,9 @@ export class ZoomCanvas extends BaseBehavior { return !!enable; } - private preventDefault(eventName: string) { - const listener = (e: Event) => e.preventDefault(); - const container = this.context.canvas.getContainer(); - if (!container) return; - container.addEventListener(eventName, listener); - } + private preventDefault = (event: Event) => { + event.preventDefault(); + }; /** * 销毁缩放画布 @@ -184,6 +181,7 @@ export class ZoomCanvas extends BaseBehavior { */ public destroy() { this.shortcut.destroy(); + this.context.canvas.getContainer()?.removeEventListener(CommonEvent.WHEEL, this.preventDefault); super.destroy(); } }