所有元件

MotionSheet

有段位、支援快速甩動與捲動接力的底部面板、頂部面板或側邊抽屜。

WebReact Native浮層

動手試試

正在準備範例…

最簡用法

Filters.jsx
<MotionSheet open={open} onOpenChange={setOpen} detents={[0.45, 0.92]}>
  <FilterList />
</MotionSheet>;

它替你處理的事

  • 跟著拖曳移動,超過最大段位時有阻力,並依你放開時的速度停穩;快速一甩會移動一個段位或將它關閉。
  • 觸控拖曳會交接給可捲動的內容:往下拉時,內容會先捲回頂端,面板才開始移動。
  • 段位可以是螢幕比例、像素,或代表內容自然尺寸的 'content'。
  • 模態面板會把焦點限制在內部、讓頁面無法互動,並可用 Escape 或背景遮罩關閉。

適用情境

  • 篩選面板。
  • 分享選單。
  • 使用 side="start" 的導覽抽屜。

Props

Prop型別預設值說明
openbooleanfalse是否顯示面板。
onOpenChange(open) => void面板被拖曳、點擊或按 Escape 關閉時,帶著 false 執行。
detents(number | 'content')[]['content']停靠尺寸:螢幕比例、像素或 'content'。
detentnumber受控的段位索引。
defaultDetentnumber0未指定 detent 開啟時使用的段位索引。
onDetentChange(index) => void帶著面板停穩時所在段位的索引執行。
side'bottom' | 'top' | 'start' | 'end''bottom'面板出現的邊緣。
modalbooleantrue加入背景遮罩、把焦點限制在內部,並讓頁面無法互動。
dismissiblebooleantrue拖過最小段位、點擊背景遮罩或按 Escape 都能關閉它。
backdropClassNamestring背景遮罩的 class;backdropStyle 設定其行內樣式。
transitionTransitionspring時間曲線 { duration, easing } 或彈簧 { tempo: 'spring', spring }。彈簧被中斷時會保留動量。

其他 props 會傳給渲染的元素,所以 className、style 與事件處理函式照常可用。

Web 與 React Native

在 Web 上,模態面板是原生的 dialog;面板是一個垂直的 flex 容器,以 className 設定樣式。

在 React Native 上,它會渲染在透明的 Modal 中,返回鍵可將它關閉。內部的 ScrollView 保留自己的手勢,所以面板要從把手、標題與其他靜態區域拖曳。

用到它的範例

搜尋

輸入關鍵字搜尋文件。