跳转到内容

锚点 anchor

导航组件。三层同源:无头内核给出解剖与状态机,Vue 组件与自定义元素只是它的两层外壳,行为完全一致。

示例

基础用法

目录跟着滚动位置自己换高亮;scroll-element 把判定线挂到指定滚动容器上,不给就挂在窗口上

这是什么

滚动这一栏,看左边哪一条亮起来。

键盘怎么走

滚动这一栏,看左边哪一条亮起来。

边界在哪

滚动这一栏,看左边哪一条亮起来。

主题与令牌

滚动这一栏,看左边哪一条亮起来。

受控

传了 value 就由宿主说了算;一节都没越过判定线时它是 null,此时谁都不亮、指示条整条收起

安装

这一节的正文。

用法

这一节的正文。

常见问题

这一节的正文。

当前:(还没有一节越过判定线)

判定线偏移

offset 是判定线距容器视口顶边的距离,有吸顶栏就把栏高填进去,越过它的最后一节才算当前节

吸顶栏(44px)
第一节

这一节被吸顶栏挡住时不算当前节。

第二节

这一节被吸顶栏挡住时不算当前节。

第三节

这一节被吸顶栏挡住时不算当前节。

横排目录

orientation="horizontal" 只改样式:条目排成一行,轨道与指示条从起始缘挪到底边

概览

这一节的正文。

属性

这一节的正文。

事件

这一节的正文。

插槽

这一节的正文。

语气

tone 换的是选中那一节的指示条与文字颜色,这里用 default-value 预置「用法」为选中项

尺寸

size 换条目的字号与左右内边距,不传 size 即默认档

吸顶目录

目录用 sticky 钉在滚动容器顶边,滚动时留在原处;判定线仍由 offset 定

简介

滚动整块区域,左边的目录会一直贴在顶边。

安装

滚动整块区域,左边的目录会一直贴在顶边。

用法

滚动整块区域,左边的目录会一直贴在顶边。

常见问题

滚动整块区域,左边的目录会一直贴在顶边。

二级目录

子链接嵌在父项里的原生列表中,按文档序照常参与结算;父级要不要跟着亮由宿主自己算

指南

这一节的正文。

安装

这一节的正文。

快速开始

这一节的正文。

接口

这一节的正文。

属性

这一节的正文。

事件

这一节的正文。

从外部跳到某一节

组件只在点链接时滚动;程序化跳转由宿主自己滚,滚完观察器会把高亮结算过来

当前:(还没有一节越过判定线)
简介

这一节的正文。

用法

这一节的正文。

常见问题

这一节的正文。

产物

自定义元素<xh-anchor>
Vue 组件XhAnchorIndicator XhAnchorItem XhAnchorLink XhAnchorList XhAnchorRoot
组合式函数useAnchor
状态机anchorMachine
皮肤@xihan-ui/styles/anchor.css

解剖

部件名即 data-part 属性值,也是皮肤的选择器。加粗的是必备部件,不渲染它组件不工作(Web Components 适配器会在诊断通道上报 wc.missing-part)。

data-scope="anchor"root · list · item · link · indicator

Props

属性类型必填说明
valuestring | null当前激活的锚点 id,给定即受控。
defaultValuestring | null
targetsreadonly string[]目标区块的 id 清单,按文档序给;不给则按渲染出来的 link 现查。
offsetnumber判定线距滚动容器视口顶边的距离(px),默认 0。
smoothboolean点链接时平滑滚动到目标,默认 false。
dirDirection文字方向,作用于排版与指示条的起始缘。
orientationOrientation列表轴向,默认 vertical,只影响样式。
translationsPartial<AnchorTranslations>
toneTone语气:brand / neutral / success / warning / danger / info,决定用哪族颜色。
sizeSize尺寸:sm / md / lg。
onValueChange(details: AnchorValueChangeDetails) => voidvalue 变化意图回调。

状态机

状态idle · scrolling

事件SPY.RESOLVE · LINK.CLICK · VALUE.SET · after.scrollLock

判据isSmooth · isTargetReached

connect API

useAnchor 产出的对象。getXxxProps() 铺到对应部件的宿主元素上,其余是可读状态与操作入口。

成员类型说明
valuestring | null当前激活的锚点 id;一个都没越过判定线时为 null。
isActive(value: string) => boolean
setValue(next: string | null) => void
getRootProps() => T['element']
getListProps() => T['element']
getItemProps() => T['element']
getLinkProps(props: AnchorLinkProps) => T['element']
getIndicatorProps() => T['element']

键盘

规格出处:W3C APG

按键生效条件行为
Enterfocus in link跳到目标区块:smooth 关时由原生 <a href="#id"> 跳转,开时组件拦下并平滑滚动(两种情况都当场把激活项切过去,不等观察器)
Tab / Shift+Tabfocus in root逐条走过目录里的链接;锚点导航不做 roving tabindex,每一条都是独立的 Tab 停靠点

Released under The MIT License