Reka UI logoReka
backdrop
组件

滚动区域

增强原生滚动功能,实现自定义的跨浏览器样式。
标签
v1.2.0-beta.50
v1.2.0-beta.49
v1.2.0-beta.48
v1.2.0-beta.47
v1.2.0-beta.46
v1.2.0-beta.45
v1.2.0-beta.44
v1.2.0-beta.43
v1.2.0-beta.42
v1.2.0-beta.41
v1.2.0-beta.40
v1.2.0-beta.39
v1.2.0-beta.38
v1.2.0-beta.37
v1.2.0-beta.36
v1.2.0-beta.35
v1.2.0-beta.34
v1.2.0-beta.33
v1.2.0-beta.32
v1.2.0-beta.31
v1.2.0-beta.30
v1.2.0-beta.29
v1.2.0-beta.28
v1.2.0-beta.27
v1.2.0-beta.26
v1.2.0-beta.25
v1.2.0-beta.24
v1.2.0-beta.23
v1.2.0-beta.22
v1.2.0-beta.21
v1.2.0-beta.20
v1.2.0-beta.19
v1.2.0-beta.18
v1.2.0-beta.17
v1.2.0-beta.16
v1.2.0-beta.15
v1.2.0-beta.14
v1.2.0-beta.13
v1.2.0-beta.12
v1.2.0-beta.11
v1.2.0-beta.10
v1.2.0-beta.9
v1.2.0-beta.8
v1.2.0-beta.7
v1.2.0-beta.6
v1.2.0-beta.5
v1.2.0-beta.4
v1.2.0-beta.3
v1.2.0-beta.2
v1.2.0-beta.1

特性

  • 滚动条位于可滚动内容的上方,不占用空间。
  • 滚动是原生的;没有通过CSS转换进行的底层位置移动。
  • 仅在与控件交互时模拟指针行为,因此键盘控制不受影响。
  • 支持从右到左的方向。

安装

从命令行安装此组件。

sh
$ npm add reka-ui

结构

导入所有部分并将其组合。

vue
<script setup>
import { ScrollAreaRoot, ScrollAreaScrollbar, ScrollAreaThumb, ScrollAreaViewport } from 'reka-ui'
</script>

<template>
  <ScrollAreaRoot>
    <ScrollAreaViewport />
    <ScrollAreaScrollbar orientation="horizontal">
      <ScrollAreaThumb />
    </ScrollAreaScrollbar>
    <ScrollAreaScrollbar orientation="vertical">
      <ScrollAreaThumb />
    </ScrollAreaScrollbar>
    <ScrollAreaCorner />
  </ScrollAreaRoot>
</template>

API 参考

包含滚动区域的所有部分。

属性默认类型
as
'div'
AsTag | 组件

此组件应渲染为的元素或组件。可通过 asChild 覆盖。

asChild
布尔值

更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。

阅读我们的 组合指南了解更多详情。

dir
'ltr' | 'rtl'

适用时,组合框的阅读方向。
如果省略,则全局继承自 ConfigProvider 或假定为 LTR(从左到右)阅读模式。

scrollHideDelay
600
数字

如果 type 设置为 scrollhover,此 prop 确定时间长度(毫秒),
在用户停止与滚动条交互后,滚动条被隐藏之前。

type
'hover'
'scroll' | 'always' | 'hover' | 'auto'

描述滚动条可见性的性质,类似于 macOS 中的滚动条偏好设置控制原生滚动条的可见性。

auto - 表示当内容在相应方向上溢出时,滚动条可见。
always - 表示无论内容是否溢出,滚动条始终可见。
scroll - 表示当用户沿其相应方向滚动时,滚动条可见。
hover - 当用户沿其相应方向滚动时,以及当用户悬停在滚动区域上方时。

方法类型
scrollTop
() => void

将视口滚动到顶部

scrollTopLeft
() => void

将视口滚动到左上角

视口

滚动区域的视口区域。

属性默认类型
as
'div'
AsTag | 组件

此组件应渲染为的元素或组件。可通过 asChild 覆盖。

asChild
布尔值

更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。

阅读我们的 组合指南了解更多详情。

nonce
string

将向样式标签添加 nonce 属性,此属性可用于内容安全策略 (Content Security Policy)。
如果省略,则全局继承自 ConfigProvider

滚动条

垂直滚动条。添加第二个带有 orientation prop 的 Scrollbar 以启用水平滚动。

提示
使用 Presence 组件构建 - 支持任何 动画技术,同时保持对 Presence 发出事件的访问。
属性默认类型
as
'div'
AsTag | 组件

此组件应渲染为的元素或组件。可通过 asChild 覆盖。

asChild
布尔值

更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。

阅读我们的 组合指南了解更多详情。

forceMount
布尔值

当需要更多控制时,用于强制挂载。在与 Vue 动画库控制动画时很有用。

orientation
'vertical'
'vertical' | 'horizontal'

滚动条的方向

数据属性
[data-state]"visible" | "hidden"
[data-orientation]"垂直" | "水平"

滑块

ScrollAreaScrollbar 中使用的滑块。

属性默认类型
as
'div'
AsTag | 组件

此组件应渲染为的元素或组件。可通过 asChild 覆盖。

asChild
布尔值

更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。

阅读我们的 组合指南了解更多详情。

数据属性
[data-state]"visible" | "hidden"

角部

垂直和水平滚动条相交的角部。

属性默认类型
as
'div'
AsTag | 组件

此组件应渲染为的元素或组件。可通过 asChild 覆盖。

asChild
布尔值

更改默认渲染元素为作为子项传递的元素,合并它们的属性和行为。

阅读我们的 组合指南了解更多详情。

示例

自定义滚动

使用暴露的 viewport 在默认方法之外修改/设置滚动位置

vue
<script setup lang="ts">
import { ScrollAreaRoot, ScrollAreaScrollbar, ScrollAreaThumb, ScrollAreaViewport } from 'reka-ui'

const scrollArea = useTemplateRef('scrollArea')
function scrollToBottom() {
  const viewport = scrollArea.value?.viewport
  if (viewport) {
    const top = scrollArea.value?.$el.scrollHeight
    container.scrollTo({
      top,
      behavior: 'smooth'
    })
  }
}
</script>

<template>
  <ScrollAreaRoot ref="scrollArea">
    <ScrollAreaViewport />
    <ScrollAreaScrollbar orientation="horizontal">
      <ScrollAreaThumb />
    </ScrollAreaScrollbar>
    <ScrollAreaScrollbar orientation="vertical">
      <ScrollAreaThumb />
    </ScrollAreaScrollbar>
    <ScrollAreaCorner />
  </ScrollAreaRoot>
</template>

无障碍性

在大多数情况下,最好依赖原生滚动并使用 CSS 中可用的自定义选项。当这不足够时,ScrollArea 提供额外的可定制性,同时保持浏览器的原生滚动行为(以及无障碍功能,如键盘滚动)。

键盘交互

由于组件依赖于原生滚动,因此默认支持通过键盘滚动。具体的键盘交互可能因平台而异,因此我们在此不作具体说明,也不添加特定的事件监听器来处理通过按键事件进行的滚动。