Skip to content

TrContentNav 内容导航组件

TrContentNav 用于长内容区域和长对话场景的目录导航。

组件通过 items 渲染目录项,并根据 item.id 定位目标节点。目标节点默认使用 data-content-nav-id 标记。

默认情况下,组件使用 expandTrigger="hover",在鼠标悬浮或焦点进入时自动展开。若需要由外部控制展开状态,可将 expandTrigger 设为 manual,并配合 v-model:expanded 使用;expanded 仅在 manual 模式下作为外部输入生效,hover 模式下仍由组件内部维护展开态。

接入说明

使用组件时,通常只需要准备以下内容:

  • 目录项列表
  • id 对应的目标节点标记(默认使用 data-content-nav-id

推荐接入方式如下:

  • TrBubbleList 场景:通过 BubbleProviderboxRendererMatches.attributes 为目标节点设置 data-content-nav-id
  • 普通滚动容器:直接在章节节点上设置 data-content-nav-id

传入 scrollContainer 时,组件会在该容器内查找目标节点、监听滚动并同步激活项;未传入时,会自动回退到全局文档滚动,使用页面滚动完成定位与激活同步。

在 Bubble 场景下,data-content-nav-id 应标记在实际滚动目标节点上。使用默认 Box renderer 时,该节点通常为 .tr-bubble__box,而非整个 .tr-bubble 容器。

代码示例

BubbleList 场景

在聊天场景中,建议由调用方维护 items,并通过 BubbleProvider 为目标气泡节点设置 data-content-nav-id

loading

使用建议:

  • 参与导航的消息应提供稳定的 id
  • ContentNavItem.id 与目标 box 根节点上的 data-content-nav-id 保持一致
  • label / searchText / tooltipText 由调用方直接生成
  • 如需设置 scroll-margin-top、点击反馈或高亮样式,建议统一作用于同一目标节点;业务侧可通过 targetActiveClass / targetActiveDuration 自定义目标反馈类名和保留时长
  • expandTrigger="hover" 适用于轻量侧边目录场景

普通内容场景

在普通内容场景中,可直接在章节节点上设置 data-content-nav-id,并将对应的 items 传入 TrContentNav。示例中同时展示了点击目录项后的滚动定位与章节高亮反馈。

loading

Props

属性类型默认值说明
itemsContentNavItem[]-目录项列表。组件默认使用 item.id 匹配 [data-content-nav-id="<id>"],并滚动到对应节点
scrollContainerHTMLElement | nullnull滚动容器。传入后在该容器内解析目标节点并监听其滚动;未传入时回退到页面文档滚动
searchfalse | ContentNavSearchOptionsfalse搜索区配置。传入 false 时不显示搜索区
tooltipDelaynumber260tooltip 显示延迟,避免展开动画过程中短文本被误判为截断
activeIdstring非受控当前激活项。传入后进入受控模式
expandedboolean-展开状态。仅在 expandTrigger="manual" 时作为外部控制值使用
querystring非受控搜索词。传入后进入受控模式
placement'left' | 'right''right'停靠位置
expandTrigger'hover' | 'manual''hover'展开方式。hover 为自动展开,manual 为外部控制
targetActiveClassstring-点击目录项后追加到目标节点上的样式类名
targetActiveDurationnumber700目标节点样式类名保留时间,单位为毫秒
emptyTextstring'No matching items'搜索无结果文案

Slots

插槽参数说明
item{ item, segments, active, expanded, highlighted }自定义目录项内容
marker{ item, active }自定义目录点
search{ query, setQuery, options }自定义搜索区
empty-自定义空结果内容

Events

事件参数说明
update:activeIdvalue: string | undefined当前激活项变化
update:expandedvalue: boolean展开状态变化。manual 模式下可用于 v-model:expandedhover 模式下仅用于监听组件内部展开状态
update:queryvalue: string搜索词变化
selectitem: ContentNavItem目录项被选中时触发
activateitem: ContentNavItem目录项被激活时触发

Types

ContentNavItem

字段类型说明
idstring唯一标识,同时用于匹配目标节点
labelstring目录显示文本
searchTextstring搜索时额外匹配的文本
tooltipTextstring自定义 tooltip 文案
metaRecord<string, unknown>自定义透传数据

ContentNavSearchOptions

字段类型说明
placeholderstring搜索框占位文案
matcherContentNavSearchMatcher自定义搜索匹配逻辑
clearOnCollapseboolean收起时是否清空搜索词

CSS 变量

CSS 变量说明
--tr-content-nav-width-collapsed折叠态宽度
--tr-content-nav-width-expanded展开态宽度
--tr-content-nav-surface-radius面板圆角
--tr-content-nav-item-radius目录项圆角
--tr-content-nav-marker-width目录点宽度
--tr-content-nav-marker-height目录点高度
--tr-content-nav-marker-radius目录点圆角
--tr-content-nav-marker-track-size目录点轨道尺寸
--tr-content-nav-bg面板背景色
--tr-content-nav-border面板边框色
--tr-content-nav-shadow面板阴影
--tr-content-nav-item-color目录项文本色
--tr-content-nav-item-color-active激活目录项文本色
--tr-content-nav-item-bg-hover目录项 hover 背景色
--tr-content-nav-marker-color默认目录点颜色
--tr-content-nav-marker-color-active激活目录点颜色
--tr-content-nav-tooltip-bgtooltip 背景色
--tr-content-nav-tooltip-colortooltip 文本色
--tr-content-nav-tooltip-shadowtooltip 阴影
--tr-content-nav-search-bg搜索框背景色
--tr-content-nav-search-color搜索框文本色
--tr-content-nav-search-border搜索框边框色
--tr-content-nav-search-border-focus搜索框聚焦边框色
--tr-content-nav-search-focus-ring搜索框聚焦外环
--tr-content-nav-search-radius搜索框圆角
--tr-content-nav-empty-color空结果文本色
--tr-content-nav-focus-ring目录项聚焦外环
--tr-content-nav-highlight-color搜索高亮色