所有元件
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 與事件處理函式照常可用。