Skip to content

Commit a53dd31

Browse files
committed
refactor: ♻️ first pass
1 parent f4d791b commit a53dd31

File tree

1 file changed

+35
-20
lines changed

1 file changed

+35
-20
lines changed
Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,45 @@
1+
<!--
2+
https://www.reddit.com/r/sveltejs/comments/le28vg/whats_your_svelte_way_to_detect_if_an_element_is/
3+
https://svelte.dev/repl/4b8ccdf1d01545baa0ab6a858bc05abb?version=3.32.1
4+
-->
15
<script lang="ts">
2-
import viewport from '$lib/utils/use-viewport-action'
3-
import { createEventDispatcher } from 'svelte'
6+
import { onDestroy, onMount } from 'svelte'
7+
import { fade } from 'svelte/transition'
48
5-
const dispatch = createEventDispatcher();
9+
let loaded = false
10+
let root: HTMLElement
611
7-
export let height: string = '100'
8-
export let width: string = '100'
12+
// check if IntersectionObserver is available
13+
const hasIntersectionObserver =
14+
typeof IntersectionObserver !== 'undefined'
15+
let observer = hasIntersectionObserver
16+
? new IntersectionObserver(entries => {
17+
entries.forEach(entry => {
18+
if (entry.isIntersecting) {
19+
loaded = true
20+
observer.disconnect()
21+
}
22+
})
23+
})
24+
: null
925
10-
let intersecting: boolean
26+
onMount(() => {
27+
if (observer) {
28+
observer.observe(root)
29+
}
30+
})
31+
32+
onDestroy(() => {
33+
if (observer) {
34+
observer.disconnect()
35+
}
36+
})
1137
</script>
1238

13-
<div
14-
use:viewport
15-
on:enterViewport={() => {
16-
intersecting = true
17-
dispatch("enterViewport")
18-
}}
19-
>
20-
{#if intersecting}
21-
<div class="flex justify-center mb-12" style={`width: ${width}`}>
39+
<div bind:this={root}>
40+
{#if loaded}
41+
<div transition:fade>
2242
<slot />
2343
</div>
24-
{:else}
25-
<div
26-
class="flex justify-center mb-12"
27-
style={`height:${height}px;width: 100%`}
28-
/>
2944
{/if}
3045
</div>

0 commit comments

Comments
 (0)