WebberUI

滑動操作列表

列表項左右滑出封存/刪除操作,過閾值直接執行。

行動裝置慣用的滑動操作列表:向右拖曳露出綠色封存層、向左露出紅色刪除層,超過門檻時圖示彈跳放大並自動執行,項目飛出後收合離場;桌面上 hover 或鍵盤聚焦時會顯示按鈕 fallback,不依賴拖曳手勢。

載入預覽⋯

Playground

即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。

96
<SwipeActionList />

安裝

npx shadcn@latest add https://webberui.com/r/swipe-action-list.json

或在 components.json 設定 registries 後,改用 @webberui/swipe-action-list 安裝。

安裝依賴後,從 registry JSON(/r/swipe-action-list.jsonfiles[0].content)複製 swipe-action-list.tsx 原始碼到你的 components/ui/ 目錄:

npm install motion lucide-react clsx tailwind-merge

使用

import { SwipeActionList } from "@/components/ui/swipe-action-list";

<SwipeActionList
  items={[
    {
      id: "msg-1",
      title: "林雅婷",
      description: "設計稿已更新,麻煩幫我看一下",
      meta: "09:24",
    },
  ]}
  onArchive={(item) => console.log("封存", item.id)}
  onDelete={(item) => console.log("刪除", item.id)}
/>

Props

Prop型別預設值說明
itemsSwipeActionItem[]列表資料,項目被封存/刪除後會從內部列表移除
onArchive(item: SwipeActionItem) => void右滑(或按封存鈕)超過門檻時觸發
onDelete(item: SwipeActionItem) => void左滑(或按刪除鈕)超過門檻時觸發
thresholdnumber96觸發動作所需的拖曳距離門檻(px)
classNamestring透傳到外層容器

SwipeActionItem 欄位:

欄位型別預設值說明
idstring唯一識別碼,作為 React key 與動作回呼的參數
titlestring項目主標題(頭像縮寫取自第一個字)
descriptionstring次要描述文字,過長會單行截斷
metastring右側輔助資訊,例如時間或標籤
huenumberid 推導頭像漸層色相(0-360)

可及性

  • 桌面 hover 或鍵盤 Tab 聚焦時顯示封存/刪除按鈕 fallback(含中文 aria-label),完整功能不依賴拖曳手勢
  • 每次封存/刪除透過 aria-live="polite" 區域播報結果(如「已封存『林雅婷』」)
  • 使用者系統開啟「減少動態效果」時,省略飛出與收合動畫,項目直接移除
  • 拖曳僅鎖定水平軸並保留 touch-pan-y,不阻擋頁面垂直捲動
  • 兩側動作層為純視覺提示,對輔助科技隱藏(aria-hidden

On this page