solid-laze
Version:
Lazily render components in Solid
42 lines (41 loc) • 1.02 kB
JavaScript
// src/useLaze.ts
import { createEffect, createSignal, onCleanup } from "solid-js";
function useLaze(options) {
const [visible, setVisible] = createSignal(false);
const [ref, setRef] = createSignal(null);
createEffect(() => {
setVisible(false);
const shouldRefresh = options == null ? void 0 : options.refresh;
const current = ref();
if (!current) {
return;
}
const observer = new IntersectionObserver((entries) => {
for (const entry of entries) {
if (shouldRefresh) {
setVisible(entry.isIntersecting);
} else if (entry.isIntersecting) {
setVisible(true);
observer.disconnect();
}
}
});
observer.observe(current);
onCleanup(() => {
observer.unobserve(current);
observer.disconnect();
});
});
return {
ref(value) {
return setRef(() => value);
},
get visible() {
return visible();
}
};
}
export {
useLaze as default
};
//# sourceMappingURL=index.mjs.map