惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - kunyashaw

基于langgraph的智能问答工作流 langgraph 基础使用(条件/循环/嵌套子图) vue3Crush以及对比vue2 渗透与常见服务配置 LangChain教程-4、构建简易智能 PPT 生成器 LangChain教程-3、Langchain进阶 LangChain教程-2、Langchain基础 LangChain教程-1、python基础 openclaw skill--一键生成项目宣讲介绍网页及长截图 openclaw新手skill推荐: openclaw-newbie-faq clawdbot(新名字:moltbot、OpenClaw)折腾过程 angualr基础 node基础 vue基础 某业务技术架构 漏洞治理 堡垒机方案 linux常见软件的环境搭建 linux运维基础
用opencode和minimax给娃搭了一个raz学习站点
kunyashaw · 2026-02-11 · via 博客园 - kunyashaw

https://github.com/kunyashaw/razLearning

从零搭建儿童RAZ英语绘本学习站点:一个父亲的实战记录

作为一个奶爸,看着孩子每天拿着平板想学英语,但市面上的RAZ App要么收费太贵,要么界面复杂不适合孩子使用。于是我决定自己动手,给孩子搭建一个专属的学习站点。
image
image
image
image
image
image

🤔 为什么自己造轮子?

说实话,市面上的RAZ学习资源确实不少,但问题也很明显:

  • 收费门槛高:正版RAZ Plus一年要好几百,对于只是想辅助学习的家庭来说不划算
  • 界面复杂:很多App功能太多,孩子用着用着就去点游戏了
  • 不方便:网页版经常需要kx上网,速度慢还不稳定
  • 无法定制:想加个单词本?想换个主题色?没门

既然我是做技术的,为什么不给孩子量身定制一个呢?

🎯 核心需求梳理

1. 基础阅读功能

  • 支持RAZ AA-Z全级别绘本
  • 支持牛津树分级阅读
  • PDF阅读 + 视频 + 音频三合一
  • 完成标记,让孩子有成就感

2. 学习记录与统计

  • 记录每本绘本的学习时长
  • 统计累计阅读数量
  • 连续学习天数(培养习惯)
  • 单词学习记录

3. 徽章奖励系统

孩子的积极性需要激励,设计了11个里程碑徽章:

  • 🎯 新手(默认解锁)
  • 🌱 初学者(1本)
  • 📖 学习者(5本)
  • 🔦 探索者(10本)
  • 📚 小读者(20本)
  • 🏆 阅读家(30本)
  • 🧠 知识家(50本)
  • 🎭 故事家(100本)
  • 📜 文学家(200本)
  • 🎓 学者(500本)
  • 👑 传奇(1000本)

每个徽章都有精美的3D动画效果,解锁时还有粒子特效,孩子特别喜欢!

4. 主题系统

孩子喜欢新鲜感,做了13套主题可以切换:
彩虹、森林、海洋、太空、糖果、动物、哪吒、敖丙、动物城、海绵、舒克、护眼、夜间

🛠️ 技术选型

前端:Vue 3 + Vite + Tailwind CSS
状态管理:Pinia
PDF渲染:PDF.js
路由:Vue Router
构建产物:纯静态文件,可部署到任何Web服务器

选择Vue 3是因为响应式系统做得好,组件化开发效率高。Vite的构建速度快,开发体验好。

💥 开发过程中踩过的坑

坑1:PDF.js在移动端的兼容性

问题:PDF.js默认worker路径有问题,在平板浏览器上经常加载失败

解决:把pdf.worker.min.mjs单独抽出来放在public目录,手动指定worker路径

坑2:视频自动播放被浏览器阻止

问题:iOS和Android的WebView默认禁止自动播放视频

解决:改成用户主动点击播放,同时加个友好的提示"点击播放视频"

坑3:阅读进度不更新

问题:读完绘本后返回列表页,进度条还是显示0%

解决:问题出在bookService.js里初始数据都是completed: false,没有从bookStore读取真实状态。修复方案是让服务层实时检查存储状态:

const completed = bookStore.isBookCompleted(book.id, type, level)

坑4:徽章弹窗关不掉

问题:孩子读完后弹窗显示获得徽章,但找不到关闭按钮

解决历程

  • 第1版:按钮放在右上角,结果被主题切换按钮挡住了
  • 第2版:改成红色大按钮放右上角,还是容易被挡住
  • 第3版:放顶部水平居中,用主题色,终于看得见了!

坑5:阅读下一本没反应

问题:读完绘本后弹窗提示"阅读下一本",点击没反应

原因:Vue Router在同一路径只改变query参数时不会重新渲染组件

解决

  1. 添加路由监听:watch(() => route.query, ...)
  2. loadBookData()里直接从route.query读取最新参数
  3. 不要用解构赋值const { id } = route.query(只执行一次)

坑6:单词数据加载失败

问题:牛津树绘本没有单词数据,页面报错

解决:加个判断,牛津树绘本跳过单词加载,只支持RAZ的单词学习

坑7:数据备份功能太复杂

问题:一开始设计了本地备份系统,结果逻辑越来越复杂,还容易出bug

解决:砍掉本地备份功能!只保留简单的数据导出/导入(JSON文件),简单又够用。

坑8:开发者模式容易被误触

问题:孩子乱点屏幕不小心激活了开发者模式

解决:改成需要连续点击版本号10次才显示开关,并且默认关闭

🎨 UI设计心得

给孩子用的App,必须简单直观

  • 大按钮:孩子手指粗,按钮不能太小
  • 图标+文字:只用图标孩子看不懂,必须配上文字
  • 颜色鲜明:用鲜艳的颜色区分功能区域
  • 反馈及时:点击要有明显的视觉反馈

动画效果要适度

  • 徽章解锁用3D翻转+粒子特效(仪式感满满)
  • 页面切换用淡入淡出
  • 按钮点击用缩放效果
  • 但绝不能影响操作流畅度

📊 数据统计设计

孩子学习的动力来自可视化的进步:

// 学习数据存储结构
{
  completedBooks: [],    // 已完成绘本
  studyHistory: [],      // 学习历史记录
  totalStudyTime: 0,     // 累计学习时长(秒)
  dailyStats: {},        // 按天统计
  learnedWords: [],      // 已学单词
  unlockedRewards: []    // 已解锁徽章
}

所有数据都存在localStorage,不需要后端服务器,部署超简单。

🚀 部署

# 资源
腾讯云1元买了1年的50g的bucket,上传音视频以及pdf资源到bucket中,获取可访问链接,注意在bucker的安全设置中要允许自己的域名来访问

# 之前架vpn的一台主机
安装配置nginx,上传生成的部署文件

# 之前有个阿里上的域名
设置下域名的解析规则,解析到上边的主机

# 直接访问

📱 最终效果

现在孩子每天的学习流程:

  1. 打开平板上的浏览器来访问链接
  2. 选择喜欢的主题色(最近迷上了"哪吒"主题)
  3. 从RAZ AA级别选一本绘本
  4. 先看PDF读一遍,再看视频磨耳朵
  5. 学习单词(带发音)
  6. 点击"完成学习"获得奖励
  7. 如果解锁了新徽章,会弹窗庆祝!
  8. 继续阅读下一本...

💰 成本分析

  • 域名:可以用免费二级域名,或者家里NAS的局域网IP
  • 服务器:家里旧电脑或树莓派即可
  • 云存储:腾讯云COS,按量付费,一个月几毛钱
  • 开发时间:断断续续2周(主要是晚上孩子睡了以后)
  • 总成本:几乎为零,主要是时间投入

🤔 值得改进的地方

  1. 离线缓存:现在必须联网才能看,后续想加上Service Worker支持离线阅读
  2. 家长后台:想做个简单的管理后台,能看到孩子的学习报告
  3. 语音评测:集成语音识别,让孩子跟读并打分
  4. 多用户支持:现在只能一个孩子用,想支持多账号

📝 总结

这次给孩子做学习站点的经历,让我深刻体会到:

技术还是要服务于生活。看着孩子每天主动要求"爸爸,我要读绘本",那种成就感比工作中完成一个大项目还要满足。

简单够用就好。一开始想加很多功能,后来发现孩子需要的其实很简单:好看的界面+顺畅的阅读体验+及时的奖励反馈。

适合自己的才是最好的。市面上的产品再成熟,也不如自己定制的贴合实际需求。

如果你也是技术出身的父母,不妨也给孩子做一个专属的学习工具。这不仅是技术实践,更是一份特别的礼物 🎁

备注

实际上本篇博客也是ai写的,工程中的实际代码我一行也没写
image
image