File tree Expand file tree Collapse file tree 1 file changed +35
-20
lines changed Expand file tree Collapse file tree 1 file changed +35
-20
lines changed Original file line number Diff line number Diff line change 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 >
You can’t perform that action at this time.
0 commit comments