跳到正文

ScrollArea 滚动区域

ScrollArea 是一个带细滚动条的滚动容器,滚动条浮在内容上方,样子参照 macOS:圆角的滑块在滚动或鼠标移入时淡入,鼠标指向它时变粗(没有可见的轨道),停止滚动大约一秒后淡出。它在所有主题、所有平台上看起来都一样。滚动本身仍是原生的,滚轮、触控板、触摸和键盘都照常工作;另外可以拖动滑块,点击滑块上下的空白处会翻一页。

演示

基础用法

给滚动区域一个高度(或 max-height)。内边距请通过 contentClassName 或 contentStyle 加在内容上,不要加在滚动区域本身,这样滚动条才会贴着边缘。

横向滚动

设置 xScrollable 后,过宽的内容可以左右滚动,并出现横向滚动条。两个方向都溢出时,两条滚动条会在角落处互相让开。

触发方式

默认情况下,鼠标在区域内或正在滚动时显示滚动条。trigger="none" 让滚动条一直显示。

尺寸

size 决定滑块粗细:small 为 5px,medium 为 7px。鼠标指向滚动条或拖动滑块时,两者都会再加粗 3px。

用代码滚动

滚动区域本身就是滚动元素,所以通过 ref 可以直接调用原生的 scrollTo 和 scrollBy,onScroll 收到的也是它的滚动事件。

文本框

<textarea> 自己就是滚动元素,所以用 ScrollAreaTextarea:它包住一个原生 textarea,把同样的滚动条叠在上面。边框、背景、聚焦环放在外层(wrapperClassName),内边距放在 textarea 上(className)。输入、粘贴、受控的 value 变化时,滚动条都会跟着更新。拖动右下角可以把文本框拉高,滚动条会停在拖动把手上方,不会挡住它。

属性

名称类型默认值说明版本
triggerhover | nonehoverhover 在鼠标移入时显示滚动条,none 一直显示。滚动或拖动时总会显示。未发布
xScrollablebooleanfalse允许横向滚动,并显示横向滚动条;否则过宽的内容会被裁掉。未发布
sizesmall | mediummedium滑块粗细:5px 或 7px,悬停时再加粗 3px。未发布
contentClassNamestringundefined包裹 children 的元素的类名。未发布
contentStyleCSSPropertiesundefined包裹 children 的元素的样式。未发布
onScroll(event: UIEvent<HTMLDivElement>) => voidundefined区域每次滚动时调用。未发布
childrenReactNodeundefined要滚动的内容。未发布

ScrollArea 也接受原生 div 属性,ref 指向滚动元素本身;需要滚动时直接用元素的 scrollTo 和 scrollBy,不需要组件方法。有内容可滚动时,区域可以获得焦点(tabIndex={0}),键盘用户可以用方向键滚动;请用 aria-label 说明里面是什么内容。自定义滚动条对辅助技术隐藏,辅助技术使用的是原生滚动。

ScrollAreaTextarea 属性

名称类型默认值说明版本
triggerhover | nonehover同 ScrollArea。未发布
sizesmall | mediummedium同 ScrollArea。未发布
wrapperClassNamestringundefined包住 textarea 和滚动条的外层的类名,边框和背景写在这里。未发布
wrapperStyleCSSPropertiesundefined外层的样式。未发布

其余属性,包括 ref、className、style、value 和 onScroll,都传给原生 textarea。