UNPKG

@fe6/water-pro

Version:

An enterprise-class UI design language and Vue-based implementation

51 lines (42 loc) 1.07 kB
/** @format */ import { Ref, watchEffect, ref } from 'vue'; interface IntersectionObserverProps { target: Ref<Element | null | undefined>; root?: Ref<Element | null | undefined>; onIntersect: IntersectionObserverCallback; rootMargin?: string; threshold?: number; } export function useIntersectionObserver({ target, root, onIntersect, rootMargin = '0px', threshold = 0.1, }: IntersectionObserverProps) { let cleanup = () => {}; const observer: Ref<Nullable<IntersectionObserver>> = ref(null); const stopEffect = watchEffect(() => { cleanup(); observer.value = new IntersectionObserver(onIntersect, { root: root ? root.value : null, rootMargin, threshold, }); const current = target.value; current && observer.value.observe(current); cleanup = () => { if (observer.value) { observer.value.disconnect(); target.value && observer.value.unobserve(target.value); } }; }); return { observer, stop: () => { cleanup(); stopEffect(); }, }; }