UNPKG

vue-laze

Version:
8 lines (7 loc) 2.58 kB
{ "version": 3, "sources": ["../../../src/index.ts", "../../../src/useLaze.tsx"], "sourcesContent": ["export * from './useLaze';\nexport { default } from './useLaze';\n", "import type { Ref, UnwrapRef } from 'vue';\nimport { readonly, ref, watchEffect } from 'vue';\n\nexport interface Laze<T extends HTMLElement> {\n ref: Ref<UnwrapRef<T> | null>;\n visible: Ref<boolean>;\n}\n\nexport interface LazeOptions {\n refresh?: boolean | Ref<boolean>;\n}\n\nexport default function useLaze<T extends HTMLElement>(\n options?: LazeOptions,\n): Laze<T> {\n const visible = ref(false);\n\n // We use a reactive ref here so that the component\n // re-renders if the host element changes, therefore\n // re-evaluating our intersection logic\n const container = ref<T | null>(null);\n\n watchEffect(onCleanup => {\n // If the host changed, make sure that\n // visibility is set to false\n visible.value = false;\n\n let refresh = false;\n\n if (options && options.refresh) {\n refresh =\n typeof options.refresh === 'boolean'\n ? options.refresh\n : options.refresh.value;\n }\n\n if (container.value) {\n const current = container.value;\n\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (refresh) {\n visible.value = entry.isIntersecting;\n } else if (entry.isIntersecting) {\n // Host intersected, set visibility to true\n visible.value = true;\n\n // Stop observing\n observer.disconnect();\n }\n }\n });\n\n observer.observe(current);\n\n onCleanup(() => {\n observer.unobserve(current);\n observer.disconnect();\n });\n }\n });\n\n return {\n ref: container,\n visible: readonly(visible),\n };\n}\n"], "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,iBAA2C;AAW5B,SAAR,QACL,SACS;AACT,QAAM,cAAU,gBAAI,KAAK;AAKzB,QAAM,gBAAY,gBAAc,IAAI;AAEpC,8BAAY,eAAa;AAGvB,YAAQ,QAAQ;AAEhB,QAAI,UAAU;AAEd,QAAI,WAAW,QAAQ,SAAS;AAC9B,gBACE,OAAO,QAAQ,YAAY,YACvB,QAAQ,UACR,QAAQ,QAAQ;AAAA,IACxB;AAEA,QAAI,UAAU,OAAO;AACnB,YAAM,UAAU,UAAU;AAE1B,YAAM,WAAW,IAAI,qBAAqB,aAAW;AACnD,mBAAW,SAAS,SAAS;AAC3B,cAAI,SAAS;AACX,oBAAQ,QAAQ,MAAM;AAAA,UACxB,WAAW,MAAM,gBAAgB;AAE/B,oBAAQ,QAAQ;AAGhB,qBAAS,WAAW;AAAA,UACtB;AAAA,QACF;AAAA,MACF,CAAC;AAED,eAAS,QAAQ,OAAO;AAExB,gBAAU,MAAM;AACd,iBAAS,UAAU,OAAO;AAC1B,iBAAS,WAAW;AAAA,MACtB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,KAAK;AAAA,IACL,aAAS,qBAAS,OAAO;AAAA,EAC3B;AACF;", "names": [] }