diff --git a/packages/core/package.json b/packages/core/package.json index 4fc1af1aacc21bce735469cca27fccf243f34f87..16728f5c52dbc56f6a1055e64f7699d20d7126e9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -30,7 +30,7 @@ "@mapbox/tiny-sdf": "^1.2.5", "@turf/helpers": "^6.1.4", "ajv": "^6.10.2", - "element-resize-event": "^3.0.3", + "element-resize-detector": "^1.2.4", "eventemitter3": "^4.0.0", "gl-matrix": "^3.1.0", "hammerjs": "^2.0.8", @@ -40,7 +40,7 @@ "viewport-mercator-project": "^6.2.1" }, "devDependencies": { - "@types/element-resize-event": "^2.0.0", + "@types/element-resize-detector": "^1.1.6", "@types/gl-matrix": "^2.4.5", "@types/hammerjs": "^2.0.36", "@types/lodash": "^4.14.138", diff --git a/packages/core/src/services/scene/SceneService.ts b/packages/core/src/services/scene/SceneService.ts index 28d31989b25f32b8d5daeefddafbd7356245eb4f..6c1f811e9d318cbb859086dad8d319ef87ce5f3c 100644 --- a/packages/core/src/services/scene/SceneService.ts +++ b/packages/core/src/services/scene/SceneService.ts @@ -1,7 +1,7 @@ // @ts-ignore import { AsyncSeriesHook } from '@antv/async-hook'; import { DOM } from '@antv/l7-utils'; -import elementResizeEvent, { unbind } from 'element-resize-event'; +import elementResizeDetectorMaker from "element-resize-detector"; import { EventEmitter } from 'eventemitter3'; import { inject, injectable } from 'inversify'; import 'reflect-metadata'; @@ -115,6 +115,8 @@ export default class Scene extends EventEmitter implements ISceneService { init: AsyncSeriesHook; }; + private erdUltraFast: elementResizeDetectorMaker.Erd + public constructor() { super(); // @see https://github.com/webpack/tapable#usage @@ -202,8 +204,10 @@ export default class Scene extends EventEmitter implements ISceneService { ); this.registerContextLost(); this.initContainer(); - - elementResizeEvent( + this.erdUltraFast = elementResizeDetectorMaker({ + strategy: "scroll" //<- For ultra performance. + }); + this.erdUltraFast.listenTo( this.$container as HTMLDivElement, this.handleWindowResized, ); @@ -401,7 +405,7 @@ export default class Scene extends EventEmitter implements ISceneService { this.destroyed = true; return; } - unbind(this.$container as HTMLDivElement, this.handleWindowResized); + this.erdUltraFast.removeListener(this.$container as HTMLDivElement, this.handleWindowResized); if (window.matchMedia) { window .matchMedia('screen and (min-resolution: 2dppx)')