Skip to content
Snippets Groups Projects
scroll-to-top.tsx 1.01 KiB
Newer Older
Yusuf Akgül's avatar
Yusuf Akgül committed
"use client"

import { cn } from "@/lib/utils"
import { useEffect, useState } from "react"
import { Icons } from "./icons"
import { Button } from "./ui/button"
Yusuf Akgül's avatar
Yusuf Akgül committed

export default function ScrollToTop() {
    const [isVisible, setIsVisible] = useState(false)
Yusuf Akgül's avatar
Yusuf Akgül committed

    const toggleVisibility = () => {
        if (window.scrollY > 300) {
Yusuf Akgül's avatar
Yusuf Akgül committed
        } else {
Yusuf Akgül's avatar
Yusuf Akgül committed
        }
Yusuf Akgül's avatar
Yusuf Akgül committed

    const scrollToTop = () => {
        window.scrollTo({
            top: 0,
            behavior: "smooth"
Yusuf Akgül's avatar
Yusuf Akgül committed

    useEffect(() => {
        window.addEventListener("scroll", toggleVisibility)
        return () => window.removeEventListener("scroll", toggleVisibility)
    }, [])
Yusuf Akgül's avatar
Yusuf Akgül committed

    return (
        <div className="fixed z-50 m-3 flex justify-center">
            <Button size="lg" onClick={scrollToTop}
                className={cn(isVisible ? "block" : "hidden", "")}>
                <Icons.arrowupline className="h-3 w-3" aria-hidden="true" />
            </Button>
        </div>
Yusuf Akgül's avatar
Yusuf Akgül committed
}