From 2abaadf4be2930ad842e12dcce1f540686612752 Mon Sep 17 00:00:00 2001 From: Maarten Date: Tue, 29 Oct 2024 12:12:54 +0100 Subject: [PATCH] Scroll to top --- src/lib/components/Header.svelte | 2 +- src/lib/components/Legend.svelte | 1 - src/lib/components/ToTop.svelte | 63 ++++++++++++++++++++++++++++++++ src/lib/utils/misc.js | 8 ++++ src/routes/+page.svelte | 3 ++ 5 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 src/lib/components/ToTop.svelte diff --git a/src/lib/components/Header.svelte b/src/lib/components/Header.svelte index 298b7bf..48751b4 100644 --- a/src/lib/components/Header.svelte +++ b/src/lib/components/Header.svelte @@ -2,7 +2,7 @@ import copy from '../../data/copy.json'; -
+
+ // back to top + import { fly } from 'svelte/transition'; + import { scrollTo } from '../utils/misc'; + + let show = false; + + function handleScroll() { + if (window.scrollY > window.innerHeight) { + show = true; + } else { + show = false; + } + } + + function handleSpanClick(id) { + scrollTo(id); + } + + + + + {#if (show)} +
+ handleSpanClick('top')}>To Top +
+ {/if} + + + \ No newline at end of file diff --git a/src/lib/utils/misc.js b/src/lib/utils/misc.js index 56b5fc0..a59dbbd 100644 --- a/src/lib/utils/misc.js +++ b/src/lib/utils/misc.js @@ -54,4 +54,12 @@ export const includesTextSearch = (filter, s) => { return filterArr.some((f) => { return s.indexOf(f) > -1; }); +}; + +// scroll-to function (also set on window to make it available outside svelte) +export const scrollTo = (targetId) => { + setTimeout(() => { + document.getElementById(targetId).scrollIntoView({behavior: 'smooth'}); + }, 200); + return(false); }; \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index db6724d..8eea527 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -13,6 +13,7 @@ import AnimatedFilterIcon from '$lib/components/AnimatedFilterIcon.svelte'; import Collapsible from '$lib/components/Collapsible.svelte'; import CasesControls from '$lib/components/CasesControls.svelte'; + import ToTop from '$lib/components/ToTop.svelte'; import { splitString, haveOverlap, withinRange, includesTextSearch } from '$lib/utils/misc'; //import { setScales } from '$lib/utils/scales'; import { page } from '$app/stores'; @@ -236,6 +237,8 @@ + + {#if isMobile && !modalOpen}