diff --git a/homepage/app/components/ScrollToTop.tsx b/homepage/app/components/ScrollToTop.tsx
new file mode 100644
index 0000000..b09c329
--- /dev/null
+++ b/homepage/app/components/ScrollToTop.tsx
@@ -0,0 +1,37 @@
+import r2wc from '@r2wc/react-to-web-component'
+
+const ScrollToTop = () => {
+ const scrollToTop = () => {
+ document.body.scrollTo({ top: 0, left: 0, behavior: 'smooth' })
+ }
+
+ return (
+
+ )
+}
+
+export default ScrollToTop
+
+const WebScrollToTop = r2wc(ScrollToTop)
+window.customElements.get('scroll-to-top') ||
+ window.customElements.define('scroll-to-top', WebScrollToTop)
diff --git a/homepage/app/main.ts b/homepage/app/main.ts
index 5166389..5e8047f 100644
--- a/homepage/app/main.ts
+++ b/homepage/app/main.ts
@@ -9,6 +9,7 @@ export * from './components/NavProgress'
export * from './components/CookieConsent'
export * from './components/CopyCode'
export * from './components/CopySectionLink'
+export * from './components/ScrollToTop'
window.addEventListener('flamethrower:router:fetch', () => {
store.dispatch(isLoading())
@@ -42,11 +43,26 @@ const bodyScrollListenerCallback = () => {
else navBar.classList.remove('scrolled')
}
+let buttonHideTimeout: NodeJS.Timeout
+
+const bodyScrollButtonCallback = () => {
+ const scrollToTopButton = document.querySelector(
+ 'button.scroll-to-top-button',
+ )
+
+ scrollToTopButton?.classList.remove('hidden')
+ clearTimeout(buttonHideTimeout)
+ buttonHideTimeout = setTimeout(() => {
+ scrollToTopButton?.classList.add('hidden')
+ }, 2000)
+}
+
window.addEventListener('load', () => {
getNavbarHeight()
bodyScrollListenerCallback()
document.body.addEventListener('scroll', () => {
bodyScrollListenerCallback()
+ bodyScrollButtonCallback()
})
})
window.addEventListener('flamethrower:router:end', () => {
@@ -54,5 +70,6 @@ window.addEventListener('flamethrower:router:end', () => {
bodyScrollListenerCallback()
document.body.addEventListener('scroll', () => {
bodyScrollListenerCallback()
+ bodyScrollButtonCallback()
})
})
diff --git a/homepage/layouts/_default/baseof.html b/homepage/layouts/_default/baseof.html
index d3b7783..1d37ad0 100644
--- a/homepage/layouts/_default/baseof.html
+++ b/homepage/layouts/_default/baseof.html
@@ -38,6 +38,7 @@
{{/* footer */}}
{{- end -}}
+