diff options
Diffstat (limited to 'src/components/templates')
| -rw-r--r-- | src/components/templates/layout/layout.module.scss | 14 | ||||
| -rw-r--r-- | src/components/templates/layout/layout.tsx | 19 | 
2 files changed, 31 insertions, 2 deletions
| diff --git a/src/components/templates/layout/layout.module.scss b/src/components/templates/layout/layout.module.scss index 806d2d7..09904dc 100644 --- a/src/components/templates/layout/layout.module.scss +++ b/src/components/templates/layout/layout.module.scss @@ -13,6 +13,20 @@    border-top: fun.convert-px(3) solid var(--color-border-light);  } +.back-to-top { +  &--hidden { +    opacity: 0; +    transform: translateY(calc(var(--button-size) + var(--spacing-md))); +    visibility: hidden; +  } + +  &--visible { +    opacity: 1; +    transform: translateY(0); +    visibility: visible; +  } +} +  .noscript-spacing {    width: 100%;    height: fun.convert-px(75); diff --git a/src/components/templates/layout/layout.tsx b/src/components/templates/layout/layout.tsx index 9e9282b..3eb02ee 100644 --- a/src/components/templates/layout/layout.tsx +++ b/src/components/templates/layout/layout.tsx @@ -7,11 +7,12 @@ import Home from '@components/atoms/icons/home';  import PostsStack from '@components/atoms/icons/posts-stack';  import Main from '@components/atoms/layout/main';  import NoScript from '@components/atoms/layout/no-script'; -import Footer, { FooterProps } from '@components/organisms/layout/footer'; +import Footer, { type FooterProps } from '@components/organisms/layout/footer';  import Header, { type HeaderProps } from '@components/organisms/layout/header'; +import useScrollPosition from '@utils/hooks/use-scroll-position';  import useSettings from '@utils/hooks/use-settings';  import Script from 'next/script'; -import { FC, ReactNode } from 'react'; +import { FC, ReactNode, useState } from 'react';  import { useIntl } from 'react-intl';  import {    BreadcrumbList, @@ -162,6 +163,19 @@ const Layout: FC<LayoutProps> = ({      subjectOf: { '@id': `${url}` },    }; +  const [backToTopClassName, setBackToTopClassName] = useState<string>( +    styles['back-to-top--hidden'] +  ); +  const updateBackToTopClassName = () => { +    setBackToTopClassName( +      window.scrollY > 300 +        ? styles['back-to-top--visible'] +        : styles['back-to-top--hidden'] +    ); +  }; + +  useScrollPosition(updateBackToTopClassName); +    return (      <>        <Script @@ -203,6 +217,7 @@ const Layout: FC<LayoutProps> = ({          copyright={copyrightData}          navItems={footerNav}          topId="top" +        backToTopClassName={backToTopClassName}          className={styles.footer}        />        <noscript> | 
