11<script >
22import Img from ' ./SvelteImg.svelte'
3+ import observe from ' ./_observe.js'
34import { onMount } from ' svelte'
45
56export let src = []
@@ -11,21 +12,6 @@ let mounted = false
1112let loaded = false
1213let inview = false
1314
14- function observe (node ) {
15- const observer = new IntersectionObserver ((entries ) => {
16- if (entries[0 ].isIntersecting ) {
17- inview = true
18- observer .disconnect ()
19- }
20- })
21- observer .observe (node)
22- return {
23- destroy () {
24- observer .disconnect ()
25- }
26- }
27- }
28-
2915$: if (src .length ) {
3016 const { base64 } = src .find ((i ) => i .base64 )
3117 background = base64 ? ` url('${ base64} ') no-repeat center/cover` : undefined
@@ -39,7 +25,13 @@ onMount(() => {
3925 </script >
4026
4127{#if src .length }
42- <div class ="wrap" class:mounted class:reveal ={loaded && inview } use:observe >
28+ <div
29+ class =" wrap"
30+ class:mounted
31+ class:reveal ={loaded && inview }
32+ use:observe
33+ on:enter ={() => (inview = true )}
34+ >
4335 <Img src ={sources } bind:ref on:load ={() => (loaded = true )} on:click {...$$restProps } />
4436 <div class =" lqip" style:background />
4537 </div >
@@ -55,10 +47,11 @@ onMount(() => {
5547}
5648.mounted :global(img ) {
5749 opacity : 0 ;
58- transform : scale (1.02 );
50+ transform : scale (var ( --reveal-scale , 1.03 ) );
5951}
6052.reveal :global(img ) {
61- transition : opacity 1s linear , transform 0.6s ease-out ;
53+ transition : opacity var (--reveal-opacity-duration , 1s ) linear ,
54+ transform var (--reveal-transform-duration , 0.6s ) ease-out ;
6255 opacity : 1 ;
6356 transform : scale (1 );
6457}
0 commit comments