diff --git a/src/wwElement.vue b/src/wwElement.vue index 1b91809..1b4644c 100644 --- a/src/wwElement.vue +++ b/src/wwElement.vue @@ -135,6 +135,7 @@ export default { const delayedIsOpen = ref(isDisplayed.value); const delayedIsClosed = ref(!isDisplayed.value); const timeoutId = ref(null); + let unmountTimeoutId = null; let resizeObserver = null; let scrollableParents = []; @@ -183,8 +184,9 @@ export default { scrollableParents = []; } - watch(isDisplayed, (isDisplayed) => { - if (isDisplayed) { + watch(isDisplayed, (displayed) => { + if (displayed) { + clearTimeout(unmountTimeoutId); startPositioningDropdown(); delayedIsClosed.value = false; nextTick(() => { @@ -194,8 +196,8 @@ export default { stopPositioningDropdown(); delayedIsOpen.value = false; nextTick(() => { - setTimeout(() => { - delayedIsClosed.value = true; + unmountTimeoutId = setTimeout(() => { + if (!isDisplayed.value) delayedIsClosed.value = true; }, 250); }); } @@ -210,6 +212,7 @@ export default { onUnmounted(() => { stopPositioningDropdown(); clearTimeout(timeoutId.value); + clearTimeout(unmountTimeoutId); }); watch(