diff options
| author | Fuwn <[email protected]> | 2026-03-01 16:04:11 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-03-01 16:04:11 -0800 |
| commit | 48f0c30d47d62e4f35706edb93a1bb2f97eba14c (patch) | |
| tree | 44866d7a61adfdf01a780e0108c370294d3db78b /src/lib/Lazy.svelte | |
| parent | chore(biome): re-enable useAltText rule (diff) | |
| download | due.moe-48f0c30d47d62e4f35706edb93a1bb2f97eba14c.tar.xz due.moe-48f0c30d47d62e4f35706edb93a1bb2f97eba14c.zip | |
chore(biome): enable svelte formatting
Diffstat (limited to 'src/lib/Lazy.svelte')
| -rw-r--r-- | src/lib/Lazy.svelte | 79 |
1 files changed, 38 insertions, 41 deletions
diff --git a/src/lib/Lazy.svelte b/src/lib/Lazy.svelte index fd08ed07..6386177b 100644 --- a/src/lib/Lazy.svelte +++ b/src/lib/Lazy.svelte @@ -1,47 +1,44 @@ <script lang="ts"> - import { onMount, onDestroy } from 'svelte'; - - export let top = 0; - export let bottom = 0; - export let left = 0; - export let right = 0; - export let steps = 100; - export let threshold = 0.01; - export let once = false; - - let element: Element; - let percent = 0; - let visible = false; - let observer: IntersectionObserver; - - const intersectPercent = ( - entries: IntersectionObserverEntry[], - observer: IntersectionObserver - ) => { - for (let entry of entries) - if (entry.target === element) { - percent = Math.round(entry.intersectionRatio * 100); - visible = entry.intersectionRatio >= threshold; - - if (visible && once) observer.unobserve(element); - - break; - } - }; - - onMount(() => { - if ('IntersectionObserver' in window) { - let options = { - rootMargin: `${top}px ${right}px ${bottom}px ${left}px`, - threshold: Array.from({ length: steps }, (_, i) => i / (steps - 1)) - }; - - observer = new IntersectionObserver(intersectPercent, options); - observer.observe(element); +import { onMount, onDestroy } from 'svelte'; + +export let top = 0; +export let bottom = 0; +export let left = 0; +export let right = 0; +export let steps = 100; +export let threshold = 0.01; +export let once = false; + +let element: Element; +let percent = 0; +let visible = false; +let observer: IntersectionObserver; + +const intersectPercent = (entries: IntersectionObserverEntry[], observer: IntersectionObserver) => { + for (let entry of entries) + if (entry.target === element) { + percent = Math.round(entry.intersectionRatio * 100); + visible = entry.intersectionRatio >= threshold; + + if (visible && once) observer.unobserve(element); + + break; } - }); +}; - onDestroy(() => observer?.unobserve(element)); +onMount(() => { + if ('IntersectionObserver' in window) { + let options = { + rootMargin: `${top}px ${right}px ${bottom}px ${left}px`, + threshold: Array.from({ length: steps }, (_, i) => i / (steps - 1)) + }; + + observer = new IntersectionObserver(intersectPercent, options); + observer.observe(element); + } +}); + +onDestroy(() => observer?.unobserve(element)); </script> <div bind:this={element}> |