导航ScrollProgress阅读进度squircleMotion
滚动进度
跟随阅读位置的进度胶囊。点击后会展开成 squircle 菜单,直接跳到任意章节。
一、滚动进度
底部的胶囊会实时反映你的阅读位置。它固定在视口下方,滚动条走到哪里,胶囊就填到哪里。
当页面足够长时,进度本身就成了导航的一部分,而不是一个额外要看的指示器。
二、展开成菜单
点击胶囊,它会展开成一个 squircle 菜单,把 sections 里的章节列出来。
选中任意一项即可平滑跳转,弹簧动画让这个展开动作有明确的重量感。
三、无障碍与 reduced motion
组件遵循 prefers-reduced-motion:当系统要求减少动效时,位移被移除,只保留必要的状态变化。
在上面的区域里滚动,然后点击底部的胶囊。
上面的组件正在页面上实时运行,可以直接交互。
安装
在项目根目录执行下面的命令,组件源码会写入 @/components/ui/scroll-progress.tsx。
npx shadcn@latest add swamimalode07/rare-ui/scroll-progress用法
组件默认导出(或具名导出)即可直接使用,不需要额外的 Provider。
scroll-progress.tsx
属性
下表列出了该组件公开的主要属性,所有未列出的原生属性都会透传到根元素。
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| sections | { id: string; label: string }[] | — | 可跳转的章节列表。 |
| containerRef | RefObject<HTMLElement | null> | — | 滚动容器;默认跟随页面。 |
| offset | number | 120 | 判定激活章节的偏移量。 |