diff --git a/packages/maptalks/src/map/Map.DomEvents.ts b/packages/maptalks/src/map/Map.DomEvents.ts index 9c2ebfe587..d1df4168ef 100644 --- a/packages/maptalks/src/map/Map.DomEvents.ts +++ b/packages/maptalks/src/map/Map.DomEvents.ts @@ -265,7 +265,7 @@ Map.include(/** @lends Map.prototype */ { } const clickTimeThreshold = this.options['clickTimeThreshold']; const type = e.type; - if (isMoveEvent(type) && !GlobalConfig.isTest && isMousemoveEventBlocked(this, this.options['mousemoveThrottleTime'])) { + if (isMoveEvent(type) && !GlobalConfig.isTest && this.options['mousemoveThrottleEnable'] && isMousemoveEventBlocked(this, this.options['mousemoveThrottleTime'])) { return; } const isMouseDown = type === 'mousedown' || (type === 'touchstart' && (!(e as TouchEvent).touches || (e as TouchEvent).touches.length === 1)); @@ -471,16 +471,24 @@ Map.include(/** @lends Map.prototype */ { return; } this._wrapTerrainData(eventParam); + + const mousemoveHandler = () => { + if (eventParam.domEvent && eventParam.domEvent._cancelBubble) { + // Always trigger _moumove _touchmove event + // for hit test etc + this._fireEvent('_' + type, eventParam); + return; + } + this._fireEvent(type, eventParam); + }; if (isMoveEvent(type)) { - this.getRenderer().callInNextFrame(() => { - if (eventParam.domEvent && eventParam.domEvent._cancelBubble) { - // Always trigger _moumove _touchmove event - // for hit test etc - this._fireEvent('_' + type, eventParam); - return; - } - this._fireEvent(type, eventParam); - }); + if (!this.options['mousemoveThrottleEnable']) { + mousemoveHandler(); + } else { + this.getRenderer().callInNextFrame(() => { + mousemoveHandler(); + }); + } } else { this._fireEvent(type, eventParam); } diff --git a/packages/maptalks/src/map/Map.ts b/packages/maptalks/src/map/Map.ts index 371057a9ac..d3b4a37cea 100644 --- a/packages/maptalks/src/map/Map.ts +++ b/packages/maptalks/src/map/Map.ts @@ -94,6 +94,7 @@ const REDRAW_OPTIONS_PROPERTIES = ['centerCross', 'fog', 'fogColor', 'debugSky'] * @property {Number} [options.heightFactor=1] - the factor for height/altitude calculation,This affects the height calculation of all layers(vectortilelayer/gllayer/threelayer/3dtilelayer) * @property {Boolean} [options.stopRenderOnOffscreen=true] - whether to stop map rendering when container is offscreen * @property {Boolean} [options.originLatitudeForAltitude=40] - default latitude for map.altitudeToPoint method + * @property {Boolean} [options.mousemoveThrottleEnable=true] - enable map mousemove event throttling * @property {Number} [options.mousemoveThrottleTime=48] - mousemove event interval time(ms) * @property {Number} [options.maxFPS=0] - 0 means no frame is locked, otherwise the frame is locked * @property {Number} [options.cameraFarUndergroundInMeter=2000] - camera far distance from underground in meter @@ -161,6 +162,7 @@ const options: MapOptionsType = { 'switchDragButton': false, 'mousemoveThrottleTime': MOUSEMOVE_THROTTLE_TIME, + 'mousemoveThrottleEnable': true, 'maxFPS': 0, 'debug': false, 'cameraFarUndergroundInMeter': 2000, @@ -2840,6 +2842,7 @@ export type MapOptionsType = { supportPluginEvent?: boolean; switchDragButton?: boolean; mousemoveThrottleTime?: number; + mousemoveThrottleEnable?: boolean; maxFPS?: number; debug?: boolean; spatialReference?: SpatialReferenceType, diff --git a/packages/maptalks/src/map/handler/Map.GeometryEvents.ts b/packages/maptalks/src/map/handler/Map.GeometryEvents.ts index f8ac96fc16..c4c8990d0f 100644 --- a/packages/maptalks/src/map/handler/Map.GeometryEvents.ts +++ b/packages/maptalks/src/map/handler/Map.GeometryEvents.ts @@ -211,7 +211,7 @@ class MapGeometryEventsHandler extends Handler { } let oneMoreEvent = null; const eventType = type || domEvent.type; - if (isMoveEvent(eventType) && !GlobalConfig.isTest && isMousemoveEventBlocked(this, map.options['mousemoveThrottleTime'])) { + if (isMoveEvent(eventType) && !GlobalConfig.isTest && map.options['mousemoveThrottleEnable'] && isMousemoveEventBlocked(this, map.options['mousemoveThrottleTime'])) { stopPropagation(domEvent); return; }