From 7f38d377ddd710df886c0e82ecb5bc80b43280dc Mon Sep 17 00:00:00 2001 From: "Manu Mtz.-Almeida" Date: Wed, 26 Sep 2018 01:40:02 +0200 Subject: [PATCH] fix(tap-click): prevent activated while scrolling fixes #15752 --- core/src/utils/tap-click.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/core/src/utils/tap-click.ts b/core/src/utils/tap-click.ts index 04c69fefe2..37eefdd4c3 100644 --- a/core/src/utils/tap-click.ts +++ b/core/src/utils/tap-click.ts @@ -5,6 +5,7 @@ export function startTapClick(doc: Document) { let lastTouch = -MOUSE_WAIT * 10; let lastActivated = 0; let cancelled = false; + let scrolling = false; let activatableEle: HTMLElement | undefined; let activeDefer: any; @@ -12,7 +13,7 @@ export function startTapClick(doc: Document) { const clearDefers = new WeakMap(); function onBodyClick(ev: Event) { - if (cancelled) { + if (cancelled || scrolling) { ev.preventDefault(); ev.stopPropagation(); } @@ -45,6 +46,7 @@ export function startTapClick(doc: Document) { function cancelActive() { clearTimeout(activeDefer); + activeDefer = undefined; if (activatableEle) { removeActivated(false); activatableEle = undefined; @@ -53,7 +55,7 @@ export function startTapClick(doc: Document) { } function pointerDown(ev: any) { - if (activatableEle) { + if (activatableEle || scrolling) { return; } cancelled = false; @@ -61,6 +63,9 @@ export function startTapClick(doc: Document) { } function pointerUp(ev: UIEvent) { + if (scrolling) { + return; + } setActivatedElement(undefined, ev); if (cancelled && ev.cancelable) { ev.preventDefault(); @@ -133,7 +138,13 @@ export function startTapClick(doc: Document) { } doc.body.addEventListener('click', onBodyClick, true); - doc.body.addEventListener('ionScrollStart', cancelActive); + doc.body.addEventListener('ionScrollStart', () => { + scrolling = true; + cancelActive(); + }); + doc.body.addEventListener('ionScrollEnd', () => { + scrolling = false; + }); doc.body.addEventListener('ionGestureCaptured', cancelActive); doc.addEventListener('touchstart', onTouchStart, true);