@xwink/ui

ScrollRail

右侧细轨 + 圆点指示整页滚动进度,章节化作轨上刻度,label 即页内导航。

章节清单由宿主给(sectionsid 要对应页面上同名元素),组件不去猜页面结构。显隐也归宿主:库组件不写 viewport 断点,窄屏要藏就传 class

vue
<XScrollRail :sections="SECTIONS" class="hidden lg:block" />

判定「当前章节」用的是视口中部的窄带(rootMargin 可调),避免相邻两屏同时命中。

滚出目标章节后会清掉过期的 hash(clearHash 可关):hash 表达的是「点击刻度要去哪」的意图,用户自己滚走后意图即过期,留着只会让刷新跳回一个早已离开的位置;清掉后位置恢复由原生 scrollRestoration 接管,落点是精确像素而非章节顶部。

API

Props

名称类型默认值说明
sections 必填 ScrollRailSection[]章节清单,顺序即轨上刻度从上到下的顺序
labelstring | undefined无障碍名称,缺省「页面章节」
rootMarginstring | undefined判定「当前章节」的视口窄带,缺省取视口中部
clearHashboolean | undefined滚出目标章节后清掉过期的 hash,缺省开启