動手試試
最簡用法
Row.jsx<MotionSwipe
endActions={<button onClick={() => archive(id)}>Archive</button>}
dismiss="end"
onDismiss={() => remove(id)}
>
<MessagePreview />
</MotionSwipe>;
它替你處理的事
- 列會跟著水平拖曳,超過操作按鈕時有阻力,並依你放開時的速度停穩。
- 設定
dismiss 後,長距離滑動或快速甩出會讓列滑出、收起高度,然後呼叫 onDismiss(side)。 - 垂直捲動照常可用,同一時間只有一列保持展開。
- 點擊已展開的列會將它收起,鍵盤焦點移到操作按鈕上時會將它顯示出來。
適用情境
- 在收件匣中封存或刪除。
- 置頂一段對話。
- 從清單中移除一個項目。
Props
| Prop | 型別 | 預設值 | 說明 |
|---|
children | ReactNode | | 列的內容。 |
|---|
startActions | ReactNode | | 把列往結尾方向拖曳時,在行內開頭一側顯示。 |
|---|
endActions | ReactNode | | 把列往開頭方向拖曳時,在行內結尾一側顯示。 |
|---|
dismiss | 'start' | 'end' | 'both' | | 長距離滑動或快速甩出會移除該列的方向。 |
|---|
onDismiss | (side) => void | | 列滑出並收起後執行;請在這裡把該項目從資料中移除。 |
|---|
onOpenChange | (side | null) => void | | 帶著展開的那一側執行,列收起時為 null。 |
|---|
disabled | boolean | false | 關閉滑動。 |
|---|
contentClassName | string | | 列內容的 class;contentStyle 設定其行內樣式。 |
|---|
transition | Transition | spring | 時間曲線 { duration, easing } 或彈簧 { tempo: 'spring', spring }。彈簧被中斷時會保留動量。 |
|---|
其他 props 會傳給渲染的元素,所以 className、style 與事件處理函式照常可用。