Spaces:
Sleeping
Sleeping
| import React, { useEffect, useState } from 'react'; | |
| export default function ScrollProgress() { | |
| const [progress, setProgress] = useState(0); | |
| useEffect(() => { | |
| const onScroll = () => { | |
| const scrollTop = window.scrollY || document.documentElement.scrollTop; | |
| const height = | |
| document.documentElement.scrollHeight - document.documentElement.clientHeight; | |
| const pct = height > 0 ? Math.min(100, Math.max(0, (scrollTop / height) * 100)) : 0; | |
| setProgress(pct); | |
| }; | |
| onScroll(); | |
| window.addEventListener('scroll', onScroll, { passive: true }); | |
| window.addEventListener('resize', onScroll); | |
| return () => { | |
| window.removeEventListener('scroll', onScroll); | |
| window.removeEventListener('resize', onScroll); | |
| }; | |
| }, []); | |
| return ( | |
| <div aria-hidden="true" className="fixed inset-x-0 top-0 z-[60] h-0.5 bg-transparent"> | |
| <div | |
| className="h-full bg-gradient-to-r from-brand-600 via-accent to-brand-600 transition-[width] duration-150" | |
| style={{ width: `${progress}%` }} | |
| /> | |
| </div> | |
| ); | |
| } | |