全部组件
MotionSheet
带档位、支持快速甩动和滚动接力的底部面板、顶部面板或侧边抽屉。
WebReact Native浮层
动手试试
最简用法
Filters.jsx<MotionSheet open={open} onOpenChange={setOpen} detents={[0.45, 0.92]}>
<FilterList />
</MotionSheet>;
它替你处理的事
- 跟随拖动,超过最大档位时有阻力,并按你松手时的速度停稳;快速甩动会移动一个档位或将其关闭。
- 触摸拖动会交接给可滚动的内容:向下拉时,内容会先滚回顶部,面板才开始移动。
- 档位可以是屏幕比例、像素,或表示内容自然尺寸的
'content'。 - 模态面板会把焦点限制在内部,让页面不可交互,并可通过 Escape 或背景遮罩关闭。
适用场景
- 筛选面板。
- 分享菜单。
- 使用
side="start" 的导航抽屉。
Props
| Prop | 类型 | 默认值 | 说明 |
|---|
open | boolean | false | 面板是否显示。 |
|---|
onOpenChange | (open) => void | | 面板被拖动、点击或按 Escape 关闭时,携带 false 运行。 |
|---|
detents | (number | 'content')[] | ['content'] | 停靠尺寸:屏幕比例、像素或 'content'。 |
|---|
detent | number | | 受控的档位索引。 |
|---|
defaultDetent | number | 0 | 未指定 detent 打开时使用的档位索引。 |
|---|
onDetentChange | (index) => void | | 携带面板停稳时所在档位的索引运行。 |
|---|
side | 'bottom' | 'top' | 'start' | 'end' | 'bottom' | 面板出现的边缘。 |
|---|
modal | boolean | true | 添加背景遮罩,把焦点限制在内部,并让页面不可交互。 |
|---|
dismissible | boolean | true | 拖过最小档位、点击背景遮罩或按 Escape 都能关闭它。 |
|---|
backdropClassName | string | | 背景遮罩的 class;backdropStyle 设置其内联样式。 |
|---|
transition | Transition | spring | 时间曲线 { duration, easing } 或弹簧 { tempo: 'spring', spring }。弹簧被打断时会保留动量。 |
|---|
其他 props 会传给渲染的元素,所以 className、style 和事件处理函数照常可用。