Download themes/gitbook/components/Progress.js from sandy-try/blog: direct link, hf CLI and curl.
- Browser
- Download file 1.3 kB
-
https://huggingface.co/spaces/sandy-try/blog/resolve/main/themes/gitbook/components/Progress.js
- Command line
-
hf download hf://spaces/sandy-try/blog/themes/gitbook/components/Progress.js
-
curl -L -o Progress.js https://huggingface.co/spaces/sandy-try/blog/resolve/main/themes/gitbook/components/Progress.js
1.3 kB
| import { useEffect, useState } from 'react' | |
| import { isBrowser } from '@/lib/utils' | |
| /** | |
| * 顶部页面阅读进度条 | |
| * @returns {JSX.Element} | |
| * @constructor | |
| */ | |
| const Progress = ({ targetRef, showPercent = true }) => { | |
| const currentRef = targetRef?.current || targetRef | |
| const [percent, changePercent] = useState(0) | |
| const scrollListener = () => { | |
| const target = currentRef || (isBrowser && document.getElementById('posts-wrapper')) | |
| if (target) { | |
| const clientHeight = target.clientHeight | |
| const scrollY = window.pageYOffset | |
| const fullHeight = clientHeight - window.outerHeight | |
| let per = parseFloat(((scrollY / fullHeight) * 100).toFixed(0)) | |
| if (per > 100) per = 100 | |
| if (per < 0) per = 0 | |
| changePercent(per) | |
| } | |
| } | |
| useEffect(() => { | |
| document.addEventListener('scroll', scrollListener) | |
| return () => document.removeEventListener('scroll', scrollListener) | |
| }, []) | |
| return ( | |
| <div className="h-4 w-full shadow-2xl bg-hexo-light-gray dark:bg-black"> | |
| <div | |
| className="h-4 bg-gray-600 duration-200" | |
| style={{ width: `${percent}%` }} | |
| > | |
| {showPercent && ( | |
| <div className="text-right text-white text-xs">{percent}%</div> | |
| )} | |
| </div> | |
| </div> | |
| ) | |
| } | |
| export default Progress | |