ScrollRail
右侧细轨 + 圆点指示整页滚动进度,章节化作轨上刻度,label 即页内导航。
章节清单由宿主给(sections,id 要对应页面上同名元素),组件不去猜页面结构。显隐也归宿主:库组件不写 viewport 断点,窄屏要藏就传 class。
vue
<XScrollRail :sections="SECTIONS" class="hidden lg:block" />
判定「当前章节」用的是视口中部的窄带(rootMargin 可调),避免相邻两屏同时命中。
滚出目标章节后会清掉过期的 hash(clearHash 可关):hash 表达的是「点击刻度要去哪」的意图,用户自己滚走后意图即过期,留着只会让刷新跳回一个早已离开的位置;清掉后位置恢复由原生 scrollRestoration 接管,落点是精确像素而非章节顶部。
API
Props
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
sections 必填 | ScrollRailSection[] | — | 章节清单,顺序即轨上刻度从上到下的顺序 |
label | string | undefined | — | 无障碍名称,缺省「页面章节」 |
rootMargin | string | undefined | — | 判定「当前章节」的视口窄带,缺省取视口中部 |
clearHash | boolean | undefined | — | 滚出目标章节后清掉过期的 hash,缺省开启 |