一个基于 React + Tailwind CSS 的日语五十音互动学习网站,支持 PWA 离线使用。
- 多种学习模式: 在罗马音、平假名、片假名、语音中选择两种进行练习
- 互动测验: 随机题目,4选1答案
- 即时反馈:
- 答对立即进入下一题
- 答错显示正确答案,手动进入下一题
- 语音支持:
- 语音作为题目时自动播放
- 语音作为选项时点击播放
- 静音模式: 右上角切换,静音时不会出现语音题目或选项
- 分数统计: 左上角显示正确/错误数量,刷新后重置
- ✅ 完整的 Apple PWA 支持
- ✅ 离线可用(所有音频文件预缓存)
- ✅ 可安装到主屏幕
- ✅ 独立窗口运行
- 🎨 圆润、色彩鲜艳的界面
- 📱 大字体,易于阅读
- 🚫 单屏布局,无需滚动
- 📱 移动优先,响应式设计
- 构建工具: Vite
- 框架: React 18
- 样式: Tailwind CSS
- PWA: vite-plugin-pwa (Workbox)
- 状态管理: React Context + useReducer
- 包管理器: Bun
JapaneseLearn/
├── mp3/ # 46个五十音音频文件
├── public/
│ └── icons/ # PWA 图标(需要生成)
├── src/
│ ├── components/ # React 组件
│ │ ├── QuizModeSelector.jsx # 模式选择界面
│ │ ├── QuizInterface.jsx # 测验主界面
│ │ ├── QuestionDisplay.jsx # 题目显示
│ │ ├── AnswerOptions.jsx # 答案选项
│ │ ├── ScoreDisplay.jsx # 分数显示
│ │ ├── MuteToggle.jsx # 静音切换
│ │ └── AudioButton.jsx # 音频按钮
│ ├── hooks/
│ │ └── useAudioPreloader.js # 音频预加载
│ ├── context/
│ │ └── AppContext.jsx # 全局状态管理
│ ├── data/
│ │ └── soundsData.js # 46个五十音数据
│ ├── utils/
│ │ ├── quizGenerator.js # 题目生成逻辑
│ │ └── audioManager.js # 音频播放管理
│ ├── App.jsx # 根组件
│ ├── main.jsx # 入口文件
│ └── index.css # 全局样式
├── vite.config.js # Vite + PWA 配置
├── tailwind.config.js # Tailwind 配置
└── package.json
## 快速开始
### 安装依赖
```bash
bun install
bun run devbun run buildbun run preview在部署前,需要在 public/icons/ 目录下添加以下图标:
icon-192x192.png- 192x192 像素icon-512x512.png- 512x512 像素apple-touch-icon.png- 180x180 像素
推荐使用以下工具生成图标:
- 首次进入,选择学习模式,当前只有【五十音】。
- 开始测验 后,每一题都是随机的从【罗马音、平假名、片假名、语音】选择两个分别作为题目和选项(静音模式没有语音)。
- 上方显示题目
- 下方显示4个选项
- 点击选择答案
- 答对: 绿色高亮,自动进入下一题
- 答错: 红色高亮,显示正确答案,点击"下一题"继续
- 点击右上角 🔊/🔇 图标切换
- 静音时无法选择语音作为题目或答案类型
- 如果当前模式包含语音,切换静音会返回模式选择
- 左上角显示:正确 X / 错误 Y
- 刷新页面后重置
- 在 Safari 中打开网站
- 点击分享按钮
- 选择"添加到主屏幕"
- 完成后可离线使用
- 在 Chrome 中打开网站
- 点击菜单(三个点)
- 选择"安装应用"或"添加到主屏幕"
- 完成后可离线使用
项目使用 mp3/ 目录下的 46 个音频文件:
- 元音: a, i, u, e, o
- K行: ka, ki, ku, ke, ko
- S行: sa, si, su, se, so
- T行: ta, ti, tu, te, to
- N行: na, ni, nu, ne, no
- H行: ha, hi, hu, he, ho
- M行: ma, mi, mu, me, mo
- Y行: ya, yu, yo
- R行: ra, ri, ru, re, ro
- W行: wa, wo
- N: n
所有音频文件在应用启动时预加载,确保即时播放和离线可用。
- ✅ Chrome/Edge (最新版本)
- ✅ Safari (iOS 11.3+)
- ✅ Firefox (最新版本)
- ✅ Samsung Internet
在 src/data/soundsData.js 中添加新的条目:
{
id: 'ga',
romaji: 'ga',
hiragana: 'が',
katakana: 'ガ',
audio: '/mp3/ga.mp3'
}在 tailwind.config.js 中修改颜色配置。
在 src/utils/quizGenerator.js 中修改题目生成逻辑。
- ✅ 所有音频文件预加载(约 550KB)
- ✅ Service Worker 缓存策略
- ✅ 代码分割和懒加载
- ✅ Tailwind CSS 按需生成
- ✅ Vite 快速构建
MIT
Created with Claude Code