版本:2.0.0 | 作者:Chen Yu | 许可证:GPL-3.0
一款基于 Capacitor 的 Android 辩论赛计时器,支持配置赛事信息、环节、主题样式,并在计时页进行倒计时展示与提示音提醒。
作者:Chen Yu
- 赛事配置:编辑赛事名称、正反方队伍与辩题。
- 环节管理:支持无计时、单边计时、双边对辩等多种环节类型;可自由增删改环节、调整顺序。
- 名称模板:通过“持方 + 辩位 + 模板名称 + 附加项”快速生成规范环节名。
- 主题样式:自定义背景、正反方颜色、标题色、字体与字号缩放。
- 本地字体:支持上传 TTF/OTF 字体文件,仅用于文本显示(数字计时仍使用等宽字体)。
- 导出配置:导出当前比赛配置为 JSON 文件(通过 Android 系统分享)。
- 计时控制:启动/暂停、停止、重置、切换环节、环节跳转、设置时间、切换持方、全屏、音效试播等。
- 横屏锁定:计时页自动横屏,获得最佳展示效果。
- 状态栏隐藏:全屏模式下隐藏系统状态栏,沉浸式计时体验。
- Capacitor 8.x(Android 平台)
- 原生 HTML / CSS / JavaScript(无框架、无构建工具)
- Web Audio API 提示音
- Capacitor 插件:Preferences、Filesystem、Share、StatusBar、ScreenOrientation
npm install
npm run sync # 同步 Web 资源到 Android 项目
npm run build # 构建 Debug APK构建完成后,APK 位于 android/app/build/outputs/apk/debug/app-debug.apk。
- 赛事信息:填写赛事名称、正反方队伍与辩题。
- 主题与样式:选择背景类型/颜色、调整正反方颜色、标题色、字体与字号;上传自定义字体文件。
- 环节列表:
- 使用“新增陈词/质询/对辩/自由辩论”快速添加预设环节。
- 在环节卡片中修改名称、类型、时长与持方。
- 使用名称模板下拉框快速生成规范名称,点击“确认名称”应用。
- 通过“上移/下移/删除”调整环节顺序或移除环节。
- 导出:将当前完整配置保存为 JSON,通过 Android 系统分享导出。
- 比赛名称显示在环节名称上方,队伍名称与辩题显示在顶部状态栏。
- 单边计时显示一个倒计时器;双边计时显示“正方/反方”两个倒计时器,颜色区分。
- 无计时环节仅显示大号环节名称,不显示计时器。
- 控制面板新增“环节跳转”与“设置时间”按钮,可快速跳转环节或手动调整剩余时间。
- 快捷键:
Space启动/暂停(双边计时为切换发言方)P暂停Q/W/E试播 30 秒/5 秒/结束提示音F全屏/横屏B返回编辑页←/→切换环节C切换持方
.
├── public/ # Web 资源目录(Capacitor webDir)
│ ├── index.html # 入口页(重定向至 editor.html)
│ ├── editor.html # 编辑页
│ ├── timer.html # 计时页
│ ├── js/
│ │ ├── capacitor-bridge.js # Capacitor 原生 API 桥接
│ │ ├── audio.js # Web Audio 提示音
│ │ ├── timer-core.js # 计时引擎
│ │ ├── timer-app.js # 计时页 UI 控制
│ │ └── editor-app.js # 编辑页逻辑
│ └── styles/
│ ├── editor.css
│ └── timer.css
├── android/ # Capacitor Android 原生项目
├── capacitor.config.json # Capacitor 配置
├── package.json
├── README.md
└── LICENSE
本项目已从 Electron 桌面版迁移至 Capacitor Android 版。主要变更:
| 功能 | Electron 版 | Capacitor/Android 版 |
|---|---|---|
| 配置存储 | 文件系统 (fs) |
@capacitor/preferences |
| 页面切换 | 多窗口 (BrowserWindow) |
单 WebView 页面跳转 (location.href) |
| 导出配置 | dialog.showSaveDialog |
@capacitor/filesystem + @capacitor/share |
| 导出独立 EXE | WinRAR SFX |
已移除(Android 不支持 EXE) |
| 全屏 | win.setFullScreen() |
@capacitor/status-bar + @capacitor/screen-orientation |
| IPC 桥接 | preload.js + contextBridge |
public/js/capacitor-bridge.js |
GPL-3.0