diff options
| author | Eltrac <hi@guhub.cn> | 2025-09-10 16:48:59 +0800 |
|---|---|---|
| committer | Eltrac <hi@guhub.cn> | 2025-09-10 16:48:59 +0800 |
| commit | 8b7d26dfd1fc10e3143ff0d3fa969ed41f21e710 (patch) | |
| tree | 55c3db871329053489b93acea2d329ce8bd427be /layouts/_partials/components | |
| parent | 31c6eda88b7793e0ede5ba1ded54b4e5b0ee06ec (diff) | |
feat: add checkbox options
- visitor can now disable umami tracking
- visitor can now hide Batrick
Former-commit-id: c092fca1f824e18586309376478e3ad95fcab3a2
Diffstat (limited to 'layouts/_partials/components')
| -rw-r--r-- | layouts/_partials/components/back-to-top.html | 97 |
1 files changed, 51 insertions, 46 deletions
diff --git a/layouts/_partials/components/back-to-top.html b/layouts/_partials/components/back-to-top.html index 43e0807e..7e6786d8 100644 --- a/layouts/_partials/components/back-to-top.html +++ b/layouts/_partials/components/back-to-top.html @@ -14,59 +14,64 @@ </div> <script> +// hide Batrick if set +if (localStorage.getItem('geedeapro.ui.hideBatrick') === 'true') { + document.getElementById('back2top').classList.add('hidden'); +} else { + // Batrick functionality + const backToTop = document.getElementById("back2top") + const backToTopButton = document.getElementById("back2top-button") + const backToTopInstruction = document.getElementById("back2top-instruction") + const seenAndUsedBat = localStorage.getItem("seenAndUsedBat") -const backToTop = document.getElementById("back2top") -const backToTopButton = document.getElementById("back2top-button") -const backToTopInstruction = document.getElementById("back2top-instruction") -const seenAndUsedBat = localStorage.getItem("seenAndUsedBat") - -function hideInstruction() { - backToTopInstruction.remove() -} -if (seenAndUsedBat) hideInstruction() - -// listen to button click and scroll to top -backToTopButton.addEventListener("click", () => { - window.scrollTo({ top: 0, behavior: "smooth" }) - if (!seenAndUsedBat) { - localStorage.setItem("seenAndUsedBat", true); - hideInstruction(); + function hideInstruction() { + backToTopInstruction.remove() } -}) + if (seenAndUsedBat) hideInstruction() -// listen to scroll and toggle button visibility -let lastOffset = window.scrollY + // listen to button click and scroll to top + backToTopButton.addEventListener("click", () => { + window.scrollTo({ top: 0, behavior: "smooth" }) + if (!seenAndUsedBat) { + localStorage.setItem("seenAndUsedBat", true); + hideInstruction(); + } + }) -window.addEventListener("scroll", () => { - const offset = window.scrollY - const batIsHidden = backToTop.classList.contains("-top-25") - const enoughHeight = offset >= 2000 - const isScrollingUp = offset < lastOffset - const isScrollingDown = offset > lastOffset + // listen to scroll and toggle button visibility + let lastOffset = window.scrollY - function hide() { - backToTop.classList.remove("top-0") - backToTop.classList.add("-top-25") - backToTop.classList.remove("animate-head-shake") - } + window.addEventListener("scroll", () => { + const offset = window.scrollY + const batIsHidden = backToTop.classList.contains("-top-25") + const enoughHeight = offset >= 2000 + const isScrollingUp = offset < lastOffset + const isScrollingDown = offset > lastOffset - function show() { - backToTop.classList.remove("-top-25") - backToTop.classList.add("top-0") - backToTop.classList.add("animate-head-shake") - } + function hide() { + backToTop.classList.remove("top-0") + backToTop.classList.add("-top-25") + backToTop.classList.remove("animate-head-shake") + } - if (enoughHeight && isScrollingUp && batIsHidden) { - // show only when scrolling up - show() - } else if (isScrollingDown && !batIsHidden) { - // hide as soon as user scrolls down again - hide() - } + function show() { + backToTop.classList.remove("-top-25") + backToTop.classList.add("top-0") + backToTop.classList.add("animate-head-shake") + } - // hide no matter what if too close to top - if (!enoughHeight) hide() + if (enoughHeight && isScrollingUp && batIsHidden) { + // show only when scrolling up + show() + } else if (isScrollingDown && !batIsHidden) { + // hide as soon as user scrolls down again + hide() + } - lastOffset = offset -}) + // hide no matter what if too close to top + if (!enoughHeight) hide() + + lastOffset = offset + }) +} </script> |
