Skip to content

useScrollableArea

@astryxdesign/core v0.7.1 · useScrollableArea

参数 ​

参数类型默认值说明
optionsUseScrollableAreaOptions—想滚哪个方向、越界手势怎么处理、Sticky 包含关系怎么给。
options.axis'inline' | 'block' | 'both''block'哪个逻辑轴可以滚。
options.keyboardAccessScrollKeyboardAccess{ owner: 'viewport', label, role }能滚动时键盘从哪里进来。{ owner: 'content' }:内容自己有可聚焦的东西,视口不进 Tab 顺序、不带名字。{ owner: 'viewport', label, role? }:视口能滚时成为 Tab 停靠点。{ owner: 'contentOrViewport', label, role? }:同上,但 Tab 进来时如果内容里第一个就是普通按钮或链接,焦点直接交给它,方向键滚动仍归浏览器。
options.labelstring—视口的无障碍名称。没传 keyboardAccess 时用。
options.role'group' | 'region''group'视口的角色。
options.overscroll'allow' | 'contain''allow'对真的能滚的轴,越界手势怎么处理。
options.stickyContainment'whenScrollable' | 'always''whenScrollable'视口是只在能滚的时候当 Sticky 包含块,还是一直当。

返回值 ​

名称类型说明
viewport(element: unknown) => void视口元素的函数 ref。滚动监听和 ResizeObserver 都在这里挂上。
contentRef<HTMLElement | null>内容盒的模板 ref。它的尺寸变化也在观察范围里。
viewportAttrsComputedRef<Record<string, string | number | undefined>>按当前测量结果算出的 role、aria-label、tabindex 和 data-scroll-*。
viewportStyleComputedRef<CSSProperties>两个轴的 overflow,以及所请求轴上的 overscroll-behavior。
stateComputedRef<ScrollableAreaState>inline 和 block 两个轴,每个都有 isScrollable、atStart、atEnd。