Files
fj/index.html
T
selfreleaseandDevin bc0bfd9263 feat: 新增5部经典下拉选经、TTS重试、PWA可安装
- 新增阿弥陀经/普门品/道德经/清静经/太上感应篇(维基文库底本,OpenCC转简体)
- 经典切换改为下拉框(佛/道分组),移动端复用底部面板并显示分组标题
- TTS 请求失败自动重试3次;普门品偈颂拆分修复600字上限问题
- 服务端缓存原子写(.tmp+rename),上限放宽至800字
- PWA:manifest + Service Worker,安装后无地址栏独立窗口
- 偏好记忆/逐字光标/回到诵读处/夜间模式等此前改动一并入库

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-04 15:47:18 +08:00

115 lines
6.0 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="theme-color" content="#f6f1e6">
<meta name="description" content="心经、金刚经、阿弥陀经、普门品、道德经、清静经、太上感应篇诵读——千问语音合成,晨钟暮鼓配乐,逐段跟读高亮。">
<title>心经</title>
<link rel="icon" type="image/svg+xml" href="icon.svg">
<link rel="apple-touch-icon" href="icon-180.png">
<link rel="manifest" href="manifest.json">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta name="apple-mobile-web-app-title" content="经典诵读">
<link rel="stylesheet" href="style.css?v=9">
</head>
<body>
<div class="site-logo" aria-hidden="true">
<img src="icon.svg" alt="" class="logo-mark">
<span class="logo-text">经典诵读</span>
</div>
<main class="page">
<section class="hero">
<div class="seal" id="seal" aria-hidden="true">心经</div>
<div class="hero-text">
<h1 class="sutra-title" id="sutra-title">般若波罗蜜多心经</h1>
<p class="subtitle" id="sutra-sub">唐三藏法师 玄奘 译</p>
</div>
</section>
<section class="panel player-card" id="player-card" aria-label="语音诵读">
<div class="player-row">
<button id="btn-play" class="btn-play" type="button" aria-label="播放或停止">
<svg viewBox="0 0 24 24" class="icon icon-play"><path d="M8 5v14l11-7z"/></svg>
<svg viewBox="0 0 24 24" class="icon icon-stop"><rect x="6" y="6" width="12" height="12" rx="1.5"/></svg>
<span class="play-label">播 放</span>
</button>
<span id="sleep-remaining" class="sleep-remaining" aria-label="定时剩余时间"></span>
<div class="field-pair">
<label class="tool-name" for="sutra-select">经典</label>
<select id="sutra-select" aria-label="选择经典"></select>
</div>
<div class="player-meta">
<label class="voice-label" for="voice-select">诵读音色</label>
<select id="voice-select"></select>
</div>
<span class="flex-break" aria-hidden="true"></span>
<div class="tool-group" role="group" aria-label="字号">
<span class="tool-name">字号</span>
<button type="button" data-size="lg" class="size-btn">大</button>
<button type="button" data-size="md" class="size-btn active">中</button>
<button type="button" data-size="sm" class="size-btn">小</button>
</div>
<span class="flex-break flex-break-2" aria-hidden="true"></span>
<div class="tool-group" role="group" aria-label="排版">
<button type="button" id="btn-layout" class="layout-btn">切换竖排</button>
</div>
<div class="tool-group" role="group" aria-label="模式">
<button type="button" id="btn-loop" class="layout-btn" aria-pressed="false">循环</button>
<button type="button" id="btn-bgm" class="layout-btn" aria-pressed="false">配乐</button>
<button type="button" id="btn-night" class="layout-btn" aria-pressed="false">夜间</button>
<div class="field-pair">
<label class="tool-name" for="timer-select">定时</label>
<select id="timer-select" aria-label="定时停止">
<option value="0">关闭</option>
<option value="30">30 分钟</option>
<option value="60">60 分钟</option>
<option value="90">90 分钟</option>
<option value="120">120 分钟</option>
</select>
</div>
<div class="field-pair">
<label class="tool-name" for="rate-select">语速</label>
<select id="rate-select" aria-label="诵读语速">
<option value="0.8">慢 0.8×</option>
<option value="1" selected>常速</option>
<option value="1.25">快 1.25×</option>
</select>
</div>
</div>
<div id="status" class="status" role="status"></div>
<button type="button" id="btn-expand" class="expand-btn" aria-expanded="false" aria-label="展开设置" title="设置">
<span class="expand-label">设置</span>
<svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09a1.65 1.65 0 0 0 1.51-1 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
</button>
</div>
<div id="progress" class="progress" aria-hidden="true"></div>
</section>
<article class="sutra-paper">
<div id="sutra" class="sutra size-md" role="document"></div>
<button type="button" id="btn-jump-now" class="jump-now" hidden>⤵ 回到诵读处</button>
</article>
<nav class="pager" id="pager" aria-label="分页" hidden>
<button type="button" id="btn-prev" class="pager-btn">‹ 上一页</button>
<span id="page-info" class="page-info"></span>
<button type="button" id="btn-next" class="pager-btn">下一页 ›</button>
</nav>
</main>
<footer class="site-footer">
<p>点击段落可从该段起诵读 · ← → 键翻页 · 语音由千问 Qwen3-TTS 合成 · 经文来源:<a id="sutra-source" href="https://www.dpm.org.cn/lemmas/243222.html" target="_blank" rel="noopener">故宫博物院</a></p>
</footer>
<audio id="audio" preload="auto"></audio>
<script src="app.js?v=9"></script>
</body>
</html>