Skip to content

Commit 7f38d37

Browse files
committed
fix(tap-click): prevent activated while scrolling
fixes #15752
1 parent 0379977 commit 7f38d37

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

core/src/utils/tap-click.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ export function startTapClick(doc: Document) {
55
let lastTouch = -MOUSE_WAIT * 10;
66
let lastActivated = 0;
77
let cancelled = false;
8+
let scrolling = false;
89

910
let activatableEle: HTMLElement | undefined;
1011
let activeDefer: any;
1112

1213
const clearDefers = new WeakMap<HTMLElement, any>();
1314

1415
function onBodyClick(ev: Event) {
15-
if (cancelled) {
16+
if (cancelled || scrolling) {
1617
ev.preventDefault();
1718
ev.stopPropagation();
1819
}
@@ -45,6 +46,7 @@ export function startTapClick(doc: Document) {
4546

4647
function cancelActive() {
4748
clearTimeout(activeDefer);
49+
activeDefer = undefined;
4850
if (activatableEle) {
4951
removeActivated(false);
5052
activatableEle = undefined;
@@ -53,14 +55,17 @@ export function startTapClick(doc: Document) {
5355
}
5456

5557
function pointerDown(ev: any) {
56-
if (activatableEle) {
58+
if (activatableEle || scrolling) {
5759
return;
5860
}
5961
cancelled = false;
6062
setActivatedElement(getActivatableTarget(ev), ev);
6163
}
6264

6365
function pointerUp(ev: UIEvent) {
66+
if (scrolling) {
67+
return;
68+
}
6469
setActivatedElement(undefined, ev);
6570
if (cancelled && ev.cancelable) {
6671
ev.preventDefault();
@@ -133,7 +138,13 @@ export function startTapClick(doc: Document) {
133138
}
134139

135140
doc.body.addEventListener('click', onBodyClick, true);
136-
doc.body.addEventListener('ionScrollStart', cancelActive);
141+
doc.body.addEventListener('ionScrollStart', () => {
142+
scrolling = true;
143+
cancelActive();
144+
});
145+
doc.body.addEventListener('ionScrollEnd', () => {
146+
scrolling = false;
147+
});
137148
doc.body.addEventListener('ionGestureCaptured', cancelActive);
138149

139150
doc.addEventListener('touchstart', onTouchStart, true);

0 commit comments

Comments
 (0)