From 9a9c960b207b66b0fac64b3615238050dcb8bbd5 Mon Sep 17 00:00:00 2001 From: Young Date: Wed, 14 Sep 2022 14:39:01 +0800 Subject: [PATCH 1/2] fix(onClickOutside): put ignore logics on `pointerdown` event --- packages/core/onClickOutside/index.ts | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/core/onClickOutside/index.ts b/packages/core/onClickOutside/index.ts index c2d49d18526..495848cb6da 100644 --- a/packages/core/onClickOutside/index.ts +++ b/packages/core/onClickOutside/index.ts @@ -54,22 +54,28 @@ export function onClickOutside( if (!el || el === event.target || composedPath.includes(el) || !shouldListen.value) return - if (ignore && ignore.length > 0) { - if (ignore.some((target) => { - const el = unrefElement(target) - return el && (event.target === el || composedPath.includes(el)) - })) - return - } - handler(event) } + const shouldIgnore = (event: PointerEvent): boolean => { + if (!ignore || !ignore.length) + return false + + const composedPath = event.composedPath() + if (ignore.some((target) => { + const el = unrefElement(target) + return el && (event.target === el || composedPath.includes(el)) + })) + return true + + return false + } + const cleanup = [ useEventListener(window, 'click', listener, { passive: true, capture }), useEventListener(window, 'pointerdown', (e) => { const el = unrefElement(target) - shouldListen.value = !!el && !e.composedPath().includes(el) + shouldListen.value = !!el && !e.composedPath().includes(el) && !shouldIgnore(e) }, { passive: true }), useEventListener(window, 'pointerup', (e) => { if (e.button === 0) { From 70a46e3c06375d6fe18c400a5a54e6c2c601067c Mon Sep 17 00:00:00 2001 From: Young Date: Wed, 14 Sep 2022 17:35:27 +0800 Subject: [PATCH 2/2] chore: apply suggestions --- packages/core/onClickOutside/index.ts | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/packages/core/onClickOutside/index.ts b/packages/core/onClickOutside/index.ts index 495848cb6da..7da5e51f683 100644 --- a/packages/core/onClickOutside/index.ts +++ b/packages/core/onClickOutside/index.ts @@ -49,26 +49,18 @@ export function onClickOutside( window.clearTimeout(fallback) const el = unrefElement(target) - const composedPath = event.composedPath() - if (!el || el === event.target || composedPath.includes(el) || !shouldListen.value) + if (!el || el === event.target || event.composedPath().includes(el) || !shouldListen.value) return handler(event) } - const shouldIgnore = (event: PointerEvent): boolean => { - if (!ignore || !ignore.length) - return false - - const composedPath = event.composedPath() - if (ignore.some((target) => { + const shouldIgnore = (event: PointerEvent) => { + return ignore && ignore.some((target) => { const el = unrefElement(target) - return el && (event.target === el || composedPath.includes(el)) - })) - return true - - return false + return el && (event.target === el || event.composedPath().includes(el)) + }) } const cleanup = [