Skip to content

Commit

Permalink
fix: userDropdown triggered unnecessary while overlay shown (#5520)
Browse files Browse the repository at this point in the history
* 修复顶部的用户资料下拉在弹窗被打开时,仍然可以被触发的问题
  • Loading branch information
mynetfan authored Feb 12, 2025
1 parent e7b0097 commit 182f1c9
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions packages/effects/hooks/src/use-hover-toggle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import type { Arrayable, MaybeElementRef } from '@vueuse/core';

import type { Ref } from 'vue';

import { computed, onUnmounted, ref, watch } from 'vue';
import { computed, onUnmounted, ref, unref, watch } from 'vue';

import { isFunction } from '@vben/utils';

import { useMouseInElement } from '@vueuse/core';
import { useElementHover } from '@vueuse/core';

/**
* 监测鼠标是否在元素内部,如果在元素内部则返回 true,否则返回 false
Expand All @@ -18,15 +18,19 @@ export function useHoverToggle(
refElement: Arrayable<MaybeElementRef>,
delay: (() => number) | number = 500,
) {
const isOutsides: Array<Ref<boolean>> = [];
const isHovers: Array<Ref<boolean>> = [];
const value = ref(false);
const timer = ref<ReturnType<typeof setTimeout> | undefined>();
const refs = Array.isArray(refElement) ? refElement : [refElement];
refs.forEach((refEle) => {
const listener = useMouseInElement(refEle, { handleOutside: true });
isOutsides.push(listener.isOutside);
const eleRef = computed(() => {
const ele = unref(refEle);
return ele instanceof Element ? ele : (ele?.$el as Element);
});
const isHover = useElementHover(eleRef);
isHovers.push(isHover);
});
const isOutsideAll = computed(() => isOutsides.every((v) => v.value));
const isOutsideAll = computed(() => isHovers.every((v) => !v.value));

function setValueDelay(val: boolean) {
timer.value && clearTimeout(timer.value);
Expand Down

0 comments on commit 182f1c9

Please # to comment.