import { ref, unref, onMounted, onUnmounted } from 'vue' export const useIntersectionObserver = (el, options = {}, onEntry) => { console.log({ options }) let observer = null let isIntersecting = ref(false) onMounted(() => { const $el = unref(el) if (!($el instanceof HTMLElement)) throw new Error( 'useIntersectionObserver: ref.value is not an HTMLElement' ) // Render the VeryLargeComponent when the container intersects const intersectionCallback = entries => { entries.forEach(entry => { console.log('entry', entry) isIntersecting.value = entry.isIntersecting // if (entry.isIntersecting) { // observer.unobserve(entry.target); // } if (typeof onEntry === 'function') onEntry(entry) }) } observer = new IntersectionObserver(intersectionCallback, options) observer.observe($el) }) onUnmounted(() => { console.log('UNMOUNTED') observer?.disconnect() }) return { isIntersecting, observer, } }