跳转到内容

滚动条 Scrollbar

Scrollbar 基于 OverlayScrollbars 实现,用来替换宿主元素的原生滚动条表现,同时保留原生滚动能力、滚动事件和滚动定位能力。

这个组件处理了 target 元素的创建与销毁,外部只需要关心两类能力:

  • 组件级兼容 props,例如 typeouterClassouterStyle
  • 底层 OverlayScrollbars 的配置与实例方法

如果你已经熟悉 OverlayScrollbars 原始文档,可以把 Scrollbar 看成一个 Vue 组件壳:

  • target 由组件内部容器托管
  • options 拆成了组件 props
  • eventListeners 通过 events prop 透传
  • 实例方法通过组件 ref 直接暴露

基于 OverlayScrollbars 的滚动条组件基础用法。

设置 type 属性改变滚动条类型,track 类型会持续展示滚动条轨道。

ScrollbarOverlayScrollbars 常用配置拆成了独立 props,并额外保留了 overlayOptions 用于一次性传递完整底层配置对象。

组件 ref 会暴露滚动快捷方法和 OverlayScrollbars 实例方法,适合命令式滚动、主动更新以及读取底层状态。

参数名描述类型默认值
type组件视觉类型。embed 使用嵌入式悬浮滚动条,track 始终展示轨道。'track' | 'embed''embed'
outer-class外层根节点类名。string | Record<string, any> | unknown[]-
outer-style外层根节点样式。CSSProperties | CSSProperties[]-
padding-absolute对应 OverlayScrollbarspaddingAbsoluteboolean-
show-native-overlaid-scrollbars对应 OverlayScrollbarsshowNativeOverlaidScrollbarsboolean-
update-options对应底层 update 配置。ScrollbarOptions['update']-
overflow对应底层 overflow 配置。ScrollbarOptions['overflow']-
scrollbars对应底层 scrollbars 配置。ScrollbarOptions['scrollbars']-
overlay-options完整底层 options,会与上述 props 合并。ScrollbarOptions-
events初始化时注册到底层实例的事件监听集合。ScrollbarEventListeners-
hide强制隐藏滚动条,主要用于组件内部兼容。booleanfalse
disable-horizontal禁用横向滚动。booleanfalse
disable-vertical禁用纵向滚动。booleanfalse
  • overlayOptions 作为完整底层配置的基础对象。
  • paddingAbsoluteshowNativeOverlaidScrollbarsupdateOptionsoverflowscrollbars 会覆盖 overlayOptions 中对应字段。
  • disableHorizontaldisableVertical 最终会强制对应轴的 overflowhidden
  • type 会提供默认主题类,hide 会提供默认的可见性策略;如果你显式传入 scrollbars.themescrollbars.visibilityscrollbars.autoHide,则以显式配置为准。
事件名描述参数
scroll组件级滚动事件,底层触发 scroll 时同步向上抛出。ev: Event

events prop 与底层 OverlayScrollbars 的事件名保持一致。

事件名描述参数
initialized初始化完成后触发。instance: OverlayScrollbars
updated底层实例更新且实际发生变化后触发。instance: OverlayScrollbars
args: ScrollbarUpdatedEvent
destroyed实例销毁后触发。instance: OverlayScrollbars
canceled: boolean
scroll视口滚动时触发。instance: OverlayScrollbars
ev: Event
方法名描述参数返回值版本
getOSInstance获取底层 OverlayScrollbars 实例。-OverlayScrollbars | null
options获取或更新底层 options。newOptions?: ScrollbarOptions
pure?: boolean
ScrollbarOptionsResolved | undefined
on绑定底层事件监听。eventListeners: ScrollbarEventListeners
name / listener
() => void | undefined
off解绑底层事件监听。name
listener
void
update主动触发一次底层更新。force?: booleanboolean
sleep设置底层实例是否进入休眠。sleeping: booleanvoid
state读取底层状态。-ScrollbarState | undefined
elements读取底层生成的元素引用。-ScrollbarElements | undefined
plugin获取底层插件实例。osPlugin: ScrollbarPluginunknown
destroy销毁底层实例。-void
scrollTo滚动到指定位置。options: number | { left?: number; top?: number }
y?: number
void
scrollTop纵向滚动。top: numbervoid2.40.0
scrollLeft横向滚动。left: numbervoid2.40.0
参数说明类型默认值
padding-absolute内容 padding 是否按绝对布局处理。booleanfalse
参数说明类型默认值
show-native-overlaid-scrollbars原生 overlay scrollbars 是否仍然可见。booleanfalse

updateOptions 对应底层 update 配置对象,用于调节更新检测行为。

字段说明类型默认值
elementEvents指定哪些元素事件触发更新。Array<[string, string]> | null[['img', 'load']]
debounce.mutationMutationObserver 更新节流。[timeout?, maxWait?, leading?] | number | null[0, 33]
debounce.resizeResizeObserver 更新节流。[timeout?, maxWait?, leading?] | number | nullnull
debounce.event事件更新节流。[timeout?, maxWait?, leading?] | number | null[33, 99]
debounce.env环境变化更新节流。[timeout?, maxWait?, leading?] | number | null[222, 666, true]
attributes额外监听的属性名。string[] | nullnull
ignoreMutation过滤某些 mutation。(mutation: MutationRecord) => booleannull
flowDirectionStyles自定义流向检测。(viewport: HTMLElement) => Record<string, unknown>null
字段说明类型默认值
overflow.x横向滚动策略。'hidden' | 'scroll' | 'visible' | 'visible-hidden' | 'visible-scroll''scroll'
overflow.y纵向滚动策略。'hidden' | 'scroll' | 'visible' | 'visible-hidden' | 'visible-scroll''scroll'
字段说明类型默认值
scrollbars.theme滚动条主题类名。string | nulltype 推导
scrollbars.visibility可见性策略。'visible' | 'hidden' | 'auto'embed 为 'auto',track 为 'visible'
scrollbars.autoHide自动隐藏策略。'never' | 'scroll' | 'move' | 'leave'embed 为 'leave',track 为 'never'
scrollbars.autoHideDelay自动隐藏延迟。number1300
scrollbars.autoHideSuspend首次交互前是否挂起自动隐藏。booleantrue
scrollbars.dragScroll是否允许拖拽 handle。booleantrue
scrollbars.clickScroll是否允许点击轨道滚动。boolean | 'instant' | ((isHorizontal) => options)'instant'
scrollbars.pointers响应的 pointer 类型。string[] | null['mouse', 'touch', 'pen']

组件已经把底层常用类型从包入口抛出,可以直接从 @sdata/web-vue 导入。

import type {
ScrollbarElements,
ScrollbarEventListeners,
ScrollbarExpose,
ScrollbarInstance,
ScrollbarOptions,
ScrollbarOptionsResolved,
ScrollbarProps,
ScrollbarState,
ScrollbarUpdatedEvent,
} from '@sdata/web-vue';
类型名说明
ScrollbarProps组件完整 props 类型。
ScrollbarInstance组件实例类型,包含 expose 的所有方法。
ScrollbarExpose仅包含对外暴露方法的类型。
ScrollbarOptions底层 PartialOptions 的别名,适合用作传入配置。
ScrollbarOptionsResolved底层 Options 的别名,表示完整解析后的配置。
ScrollbarEventListeners底层事件监听集合类型。
ScrollbarUpdatedEventupdated 事件第二个参数类型。
ScrollbarStatestate() 返回值类型。
ScrollbarElementselements() 返回值类型。
  • 底层行为、事件语义和字段定义与 OverlayScrollbars 文档保持一致。
  • 组件额外提供 scrollToscrollTopscrollLeft 三个快捷方法,以兼容现有 web-vue 组件调用方式。