Change max sides margin depending on window width when scrolling

Running it on window scroll avoids a flash effect on and is more optimized as it is not ran every time scrollY changes
This commit is contained in:
2021-10-24 15:29:57 +02:00
parent 18726f6798
commit fd04d98463

View File

@@ -7,8 +7,8 @@
import { quartOut } from 'svelte/easing' import { quartOut } from 'svelte/easing'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime.js' import relativeTime from 'dayjs/plugin/relativeTime.js'
import { map, lerp } from '$utils/functions'
import { getAssetUrlKey } from '$utils/helpers' import { getAssetUrlKey } from '$utils/helpers'
import { map, lerp, throttle } from '$utils/functions'
// Components // Components
import Metas from '$components/Metas.svelte' import Metas from '$components/Metas.svelte'
import IconEarth from '$components/atoms/IconEarth.svelte' import IconEarth from '$components/atoms/IconEarth.svelte'
@@ -50,14 +50,21 @@
$: currentPhotosAmount = photos.length $: currentPhotosAmount = photos.length
$: ended = currentPhotosAmount === totalPhotos $: ended = currentPhotosAmount === totalPhotos
// Container margins
/**
* Container margins
*/
let scrollProgress: number let scrollProgress: number
let sideMargins: number = 8 let sideMargins: number = innerWidth < 1200 ? 16 : 8
$: if (browser && window.innerWidth >= 768) { $: viewportScroll = (innerHeight / innerWidth) <= 0.6 ? innerHeight * 1.5 : innerHeight
const viewportScroll = innerHeight / innerWidth <= 0.6 ? innerHeight * 1.5 : innerHeight
scrollProgress = map(scrollY, 0, viewportScroll, 0, 1, true) // Define sides margin on scroll
sideMargins = lerp(8, 30, scrollProgress) const setSidesMargin = throttle(() => {
} if (window.innerWidth >= 992) {
scrollProgress = map(scrollY, 0, viewportScroll, 0, 1, true)
sideMargins = lerp(innerWidth < 1200 ? 16 : 8, 30, scrollProgress)
}
}, 50)
/** /**
@@ -186,7 +193,10 @@
image="" image=""
/> />
<svelte:window bind:scrollY bind:innerWidth bind:innerHeight /> <svelte:window
bind:scrollY bind:innerWidth bind:innerHeight
on:scroll={setSidesMargin}
/>
<main class="photos"> <main class="photos">