import { ArrowSmallUp } from '@/components/HeroIcons' import { useEffect, useState } from 'react' /** * 回顶按钮 * @returns */ export default function ReadingProgress() { const [scrollPercentage, setScrollPercentage] = useState(0) function handleScroll() { const scrollHeight = document.documentElement.scrollHeight const clientHeight = document.documentElement.clientHeight const scrollY = window.scrollY || window.pageYOffset const percent = Math.floor((scrollY / (scrollHeight - clientHeight - 20)) * 100) setScrollPercentage(percent) } // 监听滚动事件 useEffect(() => { let requestId function updateScrollPercentage() { handleScroll() requestId = null } function handleAnimationFrame() { if (requestId) { return } requestId = requestAnimationFrame(updateScrollPercentage) } window.addEventListener('scroll', handleAnimationFrame) return () => { window.removeEventListener('scroll', handleAnimationFrame) if (requestId) { cancelAnimationFrame(requestId) } } }, []) return (