From f99dc1e9ec3435fa372d60b11f5c8f161a7d4f7f Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Wed, 15 Jun 2022 16:29:07 +0200 Subject: [PATCH] Better fix for changing pointer ids on event target change --- src/ol/MapBrowserEventHandler.js | 18 +++++++++++++++--- src/ol/interaction/Pointer.js | 10 ---------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/ol/MapBrowserEventHandler.js b/src/ol/MapBrowserEventHandler.js index b17513cd53..e34350897f 100644 --- a/src/ol/MapBrowserEventHandler.js +++ b/src/ol/MapBrowserEventHandler.js @@ -73,7 +73,7 @@ class MapBrowserEventHandler extends Target { this.activePointers_ = 0; /** - * @type {!Object} + * @type {!Object} * @private */ this.trackedTouches_ = {}; @@ -169,14 +169,26 @@ class MapBrowserEventHandler extends Target { */ updateActivePointers_(pointerEvent) { const event = pointerEvent; + const id = event.pointerId; if ( event.type == MapBrowserEventType.POINTERUP || event.type == MapBrowserEventType.POINTERCANCEL ) { - delete this.trackedTouches_[event.pointerId]; + delete this.trackedTouches_[id]; } else if (event.type == MapBrowserEventType.POINTERDOWN) { - this.trackedTouches_[event.pointerId] = true; + this.trackedTouches_[id] = event; + } else if (event.type == MapBrowserEventType.POINTERMOVE) { + for (const pointerId in this.trackedTouches_) { + if (this.trackedTouches_[pointerId].target !== event.target) { + // Some platforms assign a new pointerId when the target changes. + // If this happens, delete one tracked pointer. If there is more + // than one tracked pointer for the old target, it will be cleared + // by subsequent POINTERUP events from other pointers. + delete this.trackedTouches_[pointerId]; + break; + } + } } this.activePointers_ = Object.keys(this.trackedTouches_).length; } diff --git a/src/ol/interaction/Pointer.js b/src/ol/interaction/Pointer.js index 83ff187f35..51d268e144 100644 --- a/src/ol/interaction/Pointer.js +++ b/src/ol/interaction/Pointer.js @@ -195,16 +195,6 @@ class PointerInteraction extends Interaction { const id = event.pointerId.toString(); if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) { delete this.trackedPointers_[id]; - for (const pointerId in this.trackedPointers_) { - if (this.trackedPointers_[pointerId].target !== event.target) { - // Some platforms assign a new pointerId when the target changes. - // If this happens, delete one tracked pointer. If there is more - // than one tracked pointer for the old target, it will be cleared - // by subsequent POINTERUP events from other pointers. - delete this.trackedPointers_[pointerId]; - break; - } - } } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) { this.trackedPointers_[id] = event; } else if (id in this.trackedPointers_) {