Skip to content

Commit 7472a6e

Browse files
authored
map support options.mousemoveThrottleEnable (#2573)
1 parent 047eee6 commit 7472a6e

3 files changed

Lines changed: 22 additions & 11 deletions

File tree

packages/maptalks/src/map/Map.DomEvents.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ Map.include(/** @lends Map.prototype */ {
265265
}
266266
const clickTimeThreshold = this.options['clickTimeThreshold'];
267267
const type = e.type;
268-
if (isMoveEvent(type) && !GlobalConfig.isTest && isMousemoveEventBlocked(this, this.options['mousemoveThrottleTime'])) {
268+
if (isMoveEvent(type) && !GlobalConfig.isTest && this.options['mousemoveThrottleEnable'] && isMousemoveEventBlocked(this, this.options['mousemoveThrottleTime'])) {
269269
return;
270270
}
271271
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 */ {
471471
return;
472472
}
473473
this._wrapTerrainData(eventParam);
474+
475+
const mousemoveHandler = () => {
476+
if (eventParam.domEvent && eventParam.domEvent._cancelBubble) {
477+
// Always trigger _moumove _touchmove event
478+
// for hit test etc
479+
this._fireEvent('_' + type, eventParam);
480+
return;
481+
}
482+
this._fireEvent(type, eventParam);
483+
};
474484
if (isMoveEvent(type)) {
475-
this.getRenderer().callInNextFrame(() => {
476-
if (eventParam.domEvent && eventParam.domEvent._cancelBubble) {
477-
// Always trigger _moumove _touchmove event
478-
// for hit test etc
479-
this._fireEvent('_' + type, eventParam);
480-
return;
481-
}
482-
this._fireEvent(type, eventParam);
483-
});
485+
if (!this.options['mousemoveThrottleEnable']) {
486+
mousemoveHandler();
487+
} else {
488+
this.getRenderer().callInNextFrame(() => {
489+
mousemoveHandler();
490+
});
491+
}
484492
} else {
485493
this._fireEvent(type, eventParam);
486494
}

packages/maptalks/src/map/Map.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ const REDRAW_OPTIONS_PROPERTIES = ['centerCross', 'fog', 'fogColor', 'debugSky']
9494
* @property {Number} [options.heightFactor=1] - the factor for height/altitude calculation,This affects the height calculation of all layers(vectortilelayer/gllayer/threelayer/3dtilelayer)
9595
* @property {Boolean} [options.stopRenderOnOffscreen=true] - whether to stop map rendering when container is offscreen
9696
* @property {Boolean} [options.originLatitudeForAltitude=40] - default latitude for map.altitudeToPoint method
97+
* @property {Boolean} [options.mousemoveThrottleEnable=true] - enable map mousemove event throttling
9798
* @property {Number} [options.mousemoveThrottleTime=48] - mousemove event interval time(ms)
9899
* @property {Number} [options.maxFPS=0] - 0 means no frame is locked, otherwise the frame is locked
99100
* @property {Number} [options.cameraFarUndergroundInMeter=2000] - camera far distance from underground in meter
@@ -161,6 +162,7 @@ const options: MapOptionsType = {
161162

162163
'switchDragButton': false,
163164
'mousemoveThrottleTime': MOUSEMOVE_THROTTLE_TIME,
165+
'mousemoveThrottleEnable': true,
164166
'maxFPS': 0,
165167
'debug': false,
166168
'cameraFarUndergroundInMeter': 2000,
@@ -2874,6 +2876,7 @@ export type MapOptionsType = {
28742876
supportPluginEvent?: boolean;
28752877
switchDragButton?: boolean;
28762878
mousemoveThrottleTime?: number;
2879+
mousemoveThrottleEnable?: boolean;
28772880
maxFPS?: number;
28782881
debug?: boolean;
28792882
spatialReference?: SpatialReferenceType,

packages/maptalks/src/map/handler/Map.GeometryEvents.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ class MapGeometryEventsHandler extends Handler {
211211
}
212212
let oneMoreEvent = null;
213213
const eventType = type || domEvent.type;
214-
if (isMoveEvent(eventType) && !GlobalConfig.isTest && isMousemoveEventBlocked(this, map.options['mousemoveThrottleTime'])) {
214+
if (isMoveEvent(eventType) && !GlobalConfig.isTest && map.options['mousemoveThrottleEnable'] && isMousemoveEventBlocked(this, map.options['mousemoveThrottleTime'])) {
215215
stopPropagation(domEvent);
216216
return;
217217
}

0 commit comments

Comments
 (0)