UNPKG

solid-laze

Version:
8 lines (7 loc) 2.43 kB
{ "version": 3, "sources": ["../../../src/index.ts", "../../../src/useLaze.ts"], "sourcesContent": ["export * from './useLaze';\nexport { default } from './useLaze';\n", "import { createEffect, createSignal, onCleanup } from 'solid-js';\n\nexport interface Laze<T extends HTMLElement> {\n ref: (value: T) => void;\n visible: boolean;\n}\n\nexport interface LazeOptions {\n refresh?: boolean;\n}\n\nexport default function useLaze<T extends HTMLElement>(\n options?: LazeOptions,\n): Laze<T> {\n const [visible, setVisible] = createSignal(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 [ref, setRef] = createSignal<T | null>(null);\n\n createEffect(() => {\n // If the host changed, make sure that\n // visibility is set to false\n setVisible(false);\n const shouldRefresh = options?.refresh;\n\n const current = ref();\n if (!current) {\n return;\n }\n const observer = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (shouldRefresh) {\n setVisible(entry.isIntersecting);\n } else if (entry.isIntersecting) {\n // Host intersected, set visibility to true\n setVisible(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 return {\n ref(value) {\n return setRef(() => value);\n },\n get visible() {\n return visible();\n },\n };\n}\n"], "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,sBAAsD;AAWvC,SAAR,QACL,SACS;AACT,QAAM,CAAC,SAAS,UAAU,QAAI,8BAAa,KAAK;AAKhD,QAAM,CAAC,KAAK,MAAM,QAAI,8BAAuB,IAAI;AAEjD,oCAAa,MAAM;AAGjB,eAAW,KAAK;AAChB,UAAM,gBAAgB,mCAAS;AAE/B,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AACA,UAAM,WAAW,IAAI,qBAAqB,aAAW;AACnD,iBAAW,SAAS,SAAS;AAC3B,YAAI,eAAe;AACjB,qBAAW,MAAM,cAAc;AAAA,QACjC,WAAW,MAAM,gBAAgB;AAE/B,qBAAW,IAAI;AAGf,mBAAS,WAAW;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAC;AAED,aAAS,QAAQ,OAAO;AAExB,mCAAU,MAAM;AACd,eAAS,UAAU,OAAO;AAC1B,eAAS,WAAW;AAAA,IACtB,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AAAA,IACL,IAAI,OAAO;AACT,aAAO,OAAO,MAAM,KAAK;AAAA,IAC3B;AAAA,IACA,IAAI,UAAU;AACZ,aAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AACF;", "names": [] }