SwPagination
SwPagination 是頁碼翻頁器:受控 v-model:page,頁碼切換後由父層整組替換列表資料(替換式)——與 SwGallery 的 @load-more(追加式)是兩套互斥的資料流,按場景選一種,不要混用。
響應式是純 CSS media query 雙形態:桌面完整版(頁碼視窗 + 省略號 + 跳轉 + 總數)與行動簡化版(上一頁 N / M 下一頁)同時渲染、按斷點顯隱(768px,對齊 framework)——無 JS 測寬,SSR 無 hydration 風險。
基礎分頁(total/pageSize 算頁數 + 共 N 條)
加载中...
與 SwGallery 組合(頁碼翻頁場景)
網格 + 頁碼 = loadMode="none" 的 SwGallery + 本元件;頁碼變化時整組替換 items:
SwGallery(none)+ SwPagination 組合換頁
加载中...
<script setup lang="ts">
const page = ref(1)
const { data } = await useAsyncData(
() => `list-${page.value}`,
() => request<MovieList>('/movie/list', { body: { page: page.value, page_size: 24 } }),
{ watch: [page] },
)
</script>
<template>
<SwGallery :items="data?.list ?? []" load-mode="none">
<template #default="{ item }">…</template>
</SwGallery>
<!-- 舊協議數字下發 string:一行 + 號歸一 -->
<SwPagination v-model:page="page" :page-count="+(data?.last_page ?? 1)" :total="+(data?.total ?? 0)" show-total />
</template>
定制
pageCount 直傳 + 視窗 7 + 自訂箭頭 + disabled 載入鎖
加载中...
maxVisible 視窗摺疊 + showTotal
加载中...
disabled 載入鎖(防連點)
加载中...
Props
| 名稱 | 類型 | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
page(v-model) | number | ✓ | — | 當前頁碼(從 1 開始,受控) |
total | number | 0 | 條目總數,與 pageSize 算總頁數 | |
pageSize | number | 20 | 每頁條數 | |
pageCount | number | undefined | 總頁數直傳(後端直給 last_page),優先於 total 計算 | |
maxVisible | number | 5 | 頁碼視窗寬(建議奇數),超出折疊省略號 | |
showJumper | boolean | true | 桌面端「前往 N 页」跳轉輸入(元件實際輸出為簡體中文;Enter 提交,越界 clamp) | |
showTotal | boolean | false | 「共 N 条」文案(即「共 N 條」,元件實際輸出為簡體中文;需傳 total) | |
disabled | boolean | false | 整體禁交互(載入中) | |
ariaLabel | string | '分页' | <nav> 的 aria-label(元件預設值為簡體中文) |
Events
| 名稱 | 攜帶 | 說明 |
|---|---|---|
update:page | page: number | 頁碼變化(同頁 / 越界 / disabled 不觸發) |
Slots
| 名稱 | 說明 |
|---|---|
prev / next | 自訂上 / 下一頁內容(預設內聯 SVG 箭頭) |
樣式訂製 Token
以下 CSS 變數可在業務端覆蓋(fallback 即預設值):
| 變數 | 預設值 | 說明 |
|---|---|---|
--sw-pagination-gap | 0.25rem | 頁碼之間的間距 |
--sw-pagination-item-size | 2rem | 單個頁碼的最小寬高(正方形熱區) |
--sw-pagination-item-padding | 0.375rem | 頁碼內距(頁數變多時撐寬用) |
--sw-pagination-font-size | 0.875rem | 頁碼字級 |
注意事項
- 總頁數 ≤ 1 時整體隱藏(無可翻內容不渲染)。
- 替換式 vs 追加式:要無限滾動 / 載入更多請用 SwGallery 的 loadMode,不要拿頁碼模擬。
- ISR 頁面的翻頁用 URL 承載頁碼(RESTful 路徑如
/list/page/2或 GET query),讓快取 key 區分頁碼——v-model:page綁路由參數即可。