Use page transition component to avoid repetition on main
This commit is contained in:
14
src/components/PageTransition.svelte
Normal file
14
src/components/PageTransition.svelte
Normal 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}
|
||||||
@@ -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">
|
||||||
|
|||||||
@@ -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} />
|
||||||
|
|
||||||
|
<PageTransition refresh={$page.path}>
|
||||||
<slot />
|
<slot />
|
||||||
|
</PageTransition>
|
||||||
|
|
||||||
{#if !$page.params.photo}
|
{#if !$page.params.photo}
|
||||||
<Footer />
|
<Footer />
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -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}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -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}>
|
||||||
|
|||||||
@@ -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."
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user