SwBackTop
SwBackTop 是長頁回到頂部按鈕:捲動超過閾值(預設約一屏)後右下角淡入圓形按鈕,點擊平滑捲回頂部;prefers-reduced-motion: reduce 使用者自動降級為瞬時跳轉(不做長距離平滑動畫)。scroll 監聽走 rAF 節流 + passive,僅用戶端註冊、SSR 零副作用。
按鈕視覺 2.75rem、觸摸熱區自帶 sw-hit-area(44×44);aria-label 走 framework 內建三語詞典(回到顶部 / 回到頂部 / Back to top),隨站點語言切換。
全站接入只要一行:在
layouts/default.vue掛<SwBackTop />即可(監聽 window 捲動)。下面的 Demo 因為要在文件頁內演示,都用target指到局部捲動容器——按鈕出現在視口右下角(position: fixed)。
基礎用法(target 局部容器)
捲動容器超過閾值 → 按鈕淡入 → 點擊捲回容器頂部
加载中...
<!-- 全站預設用法:layouts/default.vue 掛一次,監聽 window -->
<SwBackTop />
<!-- 局部捲動佈局:target 指到捲動容器(CSS 選擇器) -->
<SwBackTop target=".scroll-pane" />
自訂閾值
threshold(px)控制「捲過多少才出現」;不傳預設約一屏(window.innerHeight / 容器 clientHeight):
<SwBackTop :threshold="200" />
插槽自渲染
#default slot 替換預設箭頭圖示(文字 / 業務圖示庫均可):
slot 自渲染「TOP」文字鈕
加载中...
<SwBackTop><PhRocket :size="20" /></SwBackTop>
Token 移位換膚
定位 / 尺寸 / 配色全走 --sw-back-top-* token,applier 在 overrides.css 覆蓋即可,無需 :deep:
品牌色 + 大尺寸 + 自訂位置
加载中...
/* overrides.css:行動端給底部 TabBar 讓位 + 品牌色 */
:root {
--sw-back-top-bottom: 5.5rem;
--sw-back-top-bg: var(--primary);
--sw-back-top-color: var(--primary-foreground);
}
Props
| 名稱 | 類型 | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
threshold | number | undefined | 出現閾值(px)。不傳 = 約一屏(window.innerHeight / 容器 clientHeight,resize 不重算) | |
target | string | undefined | 捲動容器 CSS 選擇器;不傳監聽 window。選擇器落空時 dev warn + 組件整體 no-op |
Slots
| 名稱 | 作用域 | 說明 |
|---|---|---|
default | — | 按鈕內容,預設內聯向上箭頭 SVG |
樣式定制 Token
| Token | 預設值 | 作用點 |
|---|---|---|
--sw-back-top-right | 1.5rem | 距視口右緣 |
--sw-back-top-bottom | 2rem | 距視口底緣 |
--sw-back-top-size | 2.75rem | 按鈕直徑 |
--sw-back-top-bg | var(--card) | 底色 |
--sw-back-top-color | var(--foreground-soft) | 圖示 / 文字色 |
--sw-back-top-z | 90 | 層級(常見導航 100 之下) |
注意事項
- 無自訂事件:點擊行為即捲頂;需要埋點在外層包點擊或用
useTracker自埋(③ 檔純工具組件,不加:track)。 prefers-reduced-motion: reduce下:捲頂改瞬時跳轉、出現/消失過渡關閉(UX-004)。- 行動端有底部 TabBar 的站:覆蓋
--sw-back-top-bottom讓位(如5.5rem),framework 不內建斷點偏移(TabBar 高度是業務知識)。