From 44eb1fe59bdab58ed6bedefe8db5e13a2a487352 Mon Sep 17 00:00:00 2001 From: Uwe Klatt <42005666+uklatt@users.noreply.github.com> Date: Fri, 3 Jan 2020 12:08:35 +0100 Subject: [PATCH] Limit mouse move events to one every 17 ms --- core/input/mouse.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/core/input/mouse.js b/core/input/mouse.js index b00a2e0..344f9a8 100644 --- a/core/input/mouse.js +++ b/core/input/mouse.js @@ -11,6 +11,7 @@ import { setCapture, stopEvent, getPointerEvent } from '../util/events.js'; const WHEEL_STEP = 10; // Delta threshold for a mouse wheel step const WHEEL_STEP_TIMEOUT = 50; // ms const WHEEL_LINE_HEIGHT = 19; +const MOUSE_MOVE_DELAY = 17; // Minimum wait (ms) between two mouse moves export default class Mouse { constructor(target) { @@ -22,6 +23,7 @@ export default class Mouse { this._pos = null; this._wheelStepXTimer = null; this._wheelStepYTimer = null; + this._oldMouseMoveTime = 0; this._accumulatedWheelDeltaX = 0; this._accumulatedWheelDeltaY = 0; @@ -195,7 +197,19 @@ export default class Mouse { _handleMouseMove(e) { this._updateMousePosition(e); - this.onmousemove(this._pos.x, this._pos.y); + + // Limit mouse move events to one every MOUSE_MOVE_DELAY ms + clearTimeout(this.mouseMoveTimer); + const newMouseMoveTime = Date.now(); + if (newMouseMoveTime < this._oldMouseMoveTime + MOUSE_MOVE_DELAY) { + this.mouseMoveTimer = setTimeout(this.onmousemove.bind(this), + MOUSE_MOVE_DELAY, + this._pos.x, this._pos.y); + } else { + this.onmousemove(this._pos.x, this._pos.y); + } + this._oldMouseMoveTime = newMouseMoveTime; + stopEvent(e); } -- 2.39.2