diff --git a/packages/core/useElementVisibility/index.ts b/packages/core/useElementVisibility/index.ts index 08c05c952ea..c716ee9be57 100644 --- a/packages/core/useElementVisibility/index.ts +++ b/packages/core/useElementVisibility/index.ts @@ -1,7 +1,7 @@ import type { MaybeComputedRef } from '@vueuse/shared' -import { resolveUnref, tryOnMounted } from '@vueuse/shared' -import { ref } from 'vue-demi' +import { ref, watch } from 'vue-demi' import type { MaybeComputedElementRef } from '../unrefElement' +import { unrefElement } from '../unrefElement' import { useEventListener } from '../useEventListener' import type { ConfigurableWindow } from '../_configurable' import { defaultWindow } from '../_configurable' @@ -28,12 +28,12 @@ export function useElementVisibility( return const document = window.document - const el = resolveUnref(element) + const el = unrefElement(element) if (!el) { elementIsVisible.value = false } else { - const rect = (el as HTMLElement).getBoundingClientRect() + const rect = el.getBoundingClientRect() elementIsVisible.value = ( rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth) @@ -43,11 +43,16 @@ export function useElementVisibility( } } - tryOnMounted(testBounding) + watch( + () => unrefElement(element), + () => testBounding(), + { immediate: true, flush: 'post' }, + ) if (window) { - tryOnMounted(() => useEventListener( - () => resolveUnref(scrollTarget) || window, 'scroll', testBounding, { capture: false, passive: true })) + useEventListener(scrollTarget || window, 'scroll', testBounding, { + capture: false, passive: true, + }) } return elementIsVisible