Use page transition component to avoid repetition on main

This commit is contained in:
2021-11-30 00:23:36 +01:00
parent ba09c2af2d
commit f8fe141505
9 changed files with 28 additions and 44 deletions

View File

@@ -0,0 +1,14 @@
<script lang="ts">
import { fade } from 'svelte/transition'
export let refresh = ''
</script>
{#key refresh}
<div
in:fade={{ duration: 400, delay: 500 }}
out:fade={{ duration: 400 }}
>
<slot />
</div>
{/key}

View File

@@ -1,7 +1,6 @@
<script lang="ts"> <script lang="ts">
import { navigating, page } from '$app/stores' import { navigating, page } from '$app/stores'
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { fade } from 'svelte/transition'
import anime from 'animejs' import anime from 'animejs'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import advancedFormat from 'dayjs/plugin/advancedFormat.js' import advancedFormat from 'dayjs/plugin/advancedFormat.js'
@@ -192,10 +191,7 @@
<svelte:window bind:scrollY /> <svelte:window bind:scrollY />
<main class="location-page" <main class="location-page">
in:fade={{ duration: DURATION.PAGE_IN, delay: DURATION.PAGE_OUT }}
out:fade={{ duration: DURATION.PAGE_OUT }}
>
<section class="location-page__intro grid" bind:this={introEl}> <section class="location-page__intro grid" bind:this={introEl}>
<h1 class="title" class:is-short={location.name.length <= 4}> <h1 class="title" class:is-short={location.name.length <= 4}>
<span class="housesof mask"> <span class="housesof mask">

View File

@@ -8,6 +8,7 @@
import '$utils/polyfills' import '$utils/polyfills'
// Components // Components
import SVGSprite from '$components/SVGSprite.svelte' import SVGSprite from '$components/SVGSprite.svelte'
import PageTransition from '$components/PageTransition.svelte'
import Switcher from '$components/molecules/Switcher.svelte' import Switcher from '$components/molecules/Switcher.svelte'
import Footer from '$components/organisms/Footer.svelte' import Footer from '$components/organisms/Footer.svelte'
@@ -47,7 +48,7 @@
if (!$page.query.get('country') && !$page.path.includes('/shop/poster')) { if (!$page.query.get('country') && !$page.path.includes('/shop/poster')) {
scrollToTop() scrollToTop()
} }
}, DURATION.PAGE_OUT * 1.5) }, DURATION.PAGE_OUT + 1)
} }
}) })
@@ -59,7 +60,9 @@
<Switcher isOver={!!$page.params.location && !!$page.params.photo} /> <Switcher isOver={!!$page.params.location && !!$page.params.photo} />
<slot /> <PageTransition refresh={$page.path}>
<slot />
</PageTransition>
{#if !$page.params.photo} {#if !$page.params.photo}
<Footer /> <Footer />

View File

@@ -1,6 +1,4 @@
<script lang="ts"> <script lang="ts">
import { fade } from 'svelte/transition'
import { DURATION } from '$utils/contants'
// Components // Components
import Metas from '$components/Metas.svelte' import Metas from '$components/Metas.svelte'
import SiteTitle from '$components/atoms/SiteTitle.svelte' import SiteTitle from '$components/atoms/SiteTitle.svelte'
@@ -16,10 +14,7 @@
/> />
<main class="credits" <main class="credits">
in:fade={{ duration: DURATION.PAGE_IN, delay: DURATION.PAGE_OUT }}
out:fade={{ duration: DURATION.PAGE_OUT }}
>
<section class="credits__heading"> <section class="credits__heading">
<SiteTitle variant="inline" /> <SiteTitle variant="inline" />
<p class="text-medium">{data.credits.text}</p> <p class="text-medium">{data.credits.text}</p>

View File

@@ -1,9 +1,7 @@
<script lang="ts"> <script lang="ts">
import { getContext, onMount } from 'svelte' import { getContext, onMount } from 'svelte'
import { fade } from 'svelte/transition'
import { page } from '$app/stores' import { page } from '$app/stores'
import anime from 'animejs' import anime from 'animejs'
import { DURATION } from '$utils/contants'
// Components // Components
import Metas from '$components/Metas.svelte' import Metas from '$components/Metas.svelte'
import SplitText from '$components/SplitText.svelte' import SplitText from '$components/SplitText.svelte'
@@ -64,10 +62,7 @@
image="" image=""
/> />
<main class="homepage" <main class="homepage">
in:fade={{ duration: DURATION.PAGE_IN, delay: DURATION.PAGE_OUT }}
out:fade={{ duration: DURATION.PAGE_OUT }}
>
<section class="homepage__intro"> <section class="homepage__intro">
<ScrollingTitle <ScrollingTitle
tag="h1" tag="h1"

View File

@@ -1,7 +1,5 @@
<script lang="ts"> <script lang="ts">
import { getContext } from 'svelte' import { getContext } from 'svelte'
import { fade } from 'svelte/transition'
import { DURATION } from '$utils/contants'
// Components // Components
import Metas from '$components/Metas.svelte' import Metas from '$components/Metas.svelte'
import InteractiveGlobe from '$components/organisms/InteractiveGlobe.svelte' import InteractiveGlobe from '$components/organisms/InteractiveGlobe.svelte'
@@ -19,10 +17,7 @@
image="" image=""
/> />
<main class="explore" <main class="explore">
in:fade={{ duration: DURATION.PAGE_IN, delay: DURATION.PAGE_OUT }}
out:fade={{ duration: DURATION.PAGE_OUT }}
>
<Heading <Heading
text="Explore the globe to discover unique locations across the world" text="Explore the globe to discover unique locations across the world"
/> />

View File

@@ -2,13 +2,12 @@
import { page } from '$app/stores' import { page } from '$app/stores'
import { goto } from '$app/navigation' import { goto } from '$app/navigation'
import { getContext, onMount } from 'svelte' import { getContext, onMount } from 'svelte'
import { fade, fly } from 'svelte/transition' import { fly } from 'svelte/transition'
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 anime from 'animejs' import anime from 'animejs'
import { map, lerp, throttle } from '$utils/functions' import { map, lerp, throttle } from '$utils/functions'
import { DURATION } from '$utils/contants'
// Components // Components
import Metas from '$components/Metas.svelte' import Metas from '$components/Metas.svelte'
import SplitText from '$components/SplitText.svelte' import SplitText from '$components/SplitText.svelte'
@@ -325,10 +324,7 @@
/> />
<main class="photos" <main class="photos">
in:fade={{ duration: DURATION.PAGE_IN, delay: DURATION.PAGE_OUT }}
out:fade={{ duration: DURATION.PAGE_OUT }}
>
<section class="photos__intro" <section class="photos__intro"
class:is-passed={scrolledPastIntro} class:is-passed={scrolledPastIntro}
> >

View File

@@ -1,8 +1,6 @@
<script lang="ts"> <script lang="ts">
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { fade } from 'svelte/transition'
import { shopLocations, cartOpen, cartNotifications } from '$utils/stores/shop' import { shopLocations, cartOpen, cartNotifications } from '$utils/stores/shop'
import { DURATION } from '$utils/contants'
// Components // Components
import Metas from '$components/Metas.svelte' import Metas from '$components/Metas.svelte'
import SiteTitle from '$components/atoms/SiteTitle.svelte' import SiteTitle from '$components/atoms/SiteTitle.svelte'
@@ -59,10 +57,7 @@
image="" image=""
/> />
<main class="shop-page" <main class="shop-page">
in:fade={{ duration: DURATION.PAGE_IN, delay: DURATION.PAGE_OUT }}
out:fade={{ duration: DURATION.PAGE_OUT }}
>
<Cart /> <Cart />
<section class="shop-page__intro" bind:this={introEl}> <section class="shop-page__intro" bind:this={introEl}>

View File

@@ -1,7 +1,5 @@
<script lang="ts"> <script lang="ts"> import { fade } from 'svelte/transition'
import { fade } from 'svelte/transition'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { DURATION } from '$utils/contants'
// Components // Components
import Metas from '$components/Metas.svelte' import Metas from '$components/Metas.svelte'
import Image from '$components/atoms/Image.svelte' import Image from '$components/atoms/Image.svelte'
@@ -18,10 +16,7 @@
image="" image=""
/> />
<main class="subscribe" <main class="subscribe">
in:fade={{ duration: DURATION.PAGE_IN, delay: DURATION.PAGE_OUT }}
out:fade={{ duration: DURATION.PAGE_OUT }}
>
<Heading <Heading
text="If you wish to be pinged when new photos are added to and limited prints become available on our shop, sign up below." text="If you wish to be pinged when new photos are added to and limited prints become available on our shop, sign up below."
/> />