Clean up tracked pointers when the event target has changed

This commit is contained in:
Andreas Hocevar
2022-06-15 12:51:13 +02:00
parent 9b6f94e194
commit 1852ad78a2

View File

@@ -195,6 +195,16 @@ 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_) {