無障礙 PDF 翻頁書套件 — PDF.js 渲染 + StPageFlip 翻頁效果。 純前端、無框架、無後端,以 WCAG 2.2 AAA 為對齊目標。
prefers-reduced-motion(自動停用翻頁動畫)zh-Hant / en,訊息可完全覆寫無建置工具,直接以 <script> 引入三個相依:
<link rel="stylesheet" href="/src/accessible-pdf-flipbook.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/page-flip@2.0.7/dist/js/page-flip.browser.js"></script>
<script src="/src/AccessiblePdfFlipbook.js"></script>
<script>
pdfjsLib.GlobalWorkerOptions.workerSrc =
'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.js';
</script>
<div id="pdfFlipbook"></div>
<script>
const flipbook = new AccessiblePdfFlipbook({
container: '#pdfFlipbook',
pdfUrl: '/files/sample.pdf',
language: 'zh-Hant',
enableKeyboard: true,
enableScreenReaderAnnouncements: true
});
await flipbook.init();
</script>
⚠️ PDF 必須與頁面同源,或伺服器設定正確的 CORS 標頭。 本機測試請使用靜態伺服器(如
npx serve),勿直接以file://開啟。
| 選項 | 型別 | 預設 | 說明 |
|---|---|---|---|
container |
string | Element | (必填) | 容器選擇器或元素 |
pdfUrl |
string | (必填) | PDF 檔案 URL |
language |
string | 'zh-Hant' |
'zh-Hant' 或 'en' |
enableKeyboard |
boolean | true |
啟用鍵盤導覽 |
enableScreenReaderAnnouncements |
boolean | true |
啟用 aria-live 報讀 |
zoom |
number | 1.5 |
PDF.js 渲染倍率(0.25–4) |
messages |
object | — | 覆寫任何 i18n 訊息 |
| 方法 | 回傳 | 說明 |
|---|---|---|
init() |
Promise<this> |
建構 DOM、掛事件、載入 PDF |
destroy() |
void |
完整清理,焦點不遺失 |
load(pdfUrl) |
Promise<void> |
載入新 PDF |
nextPage() / previousPage() |
void |
翻頁(邊界時報讀提示) |
goToPage(n) |
void |
跳至第 n 頁(1-based) |
getCurrentPage() |
number |
目前頁碼 |
getTotalPages() |
number |
總頁數 |
setZoom(scale) |
Promise<void> |
重新渲染並保留目前頁碼 |
| 按鍵 | 動作 |
|---|---|
Tab / Shift+Tab |
移動焦點 |
→ / PageDown |
下一頁 |
← / PageUp |
上一頁 |
Home / End |
第一頁 / 最後一頁 |
Enter / Space |
焦點在內容區時:下一頁 |
/src/AccessiblePdfFlipbook.js 套件主體(UMD)
/src/accessible-pdf-flipbook.css AAA 取向樣式
/examples/index.html 範例頁
/README.md 本文件
/ACCESSIBILITY.md 無障礙符合性說明
MIT