前言
当你无聊到开始数天花板的裂缝时,也许该考虑写个电子木鱼了,顺便提升一下自己的编程能力,没事还可以积积功德,好人一生平安。
故事要从一个无聊的下午说起
那是一个普通的周日下午,工作任务完成得七七八八,刷短视频刷到眼睛疼,打游戏打到手指抽筋。我坐在工位上,看着窗外的云发呆,突然意识到:我需要一个能打发时间的新玩具。
正当我无聊到开始研究宿舍的盆栽的生长周期时,灵光一闪:为什么不写个电子木鱼呢?
为什么选择电子木鱼?
你可能会问,无聊的时候不是应该刷微博、看剧、打游戏吗?
Too young too simple!
- 微博:刷着刷着就emo了
- 剧:追完一集还想看下一集,时间黑洞
- 游戏:输了生气,赢了空虚,没有一点点好处
而电子木鱼就不一样了:
- ✅ 点击就有即时反馈(功德+1!)
- ✅ 有成就感(等级系统!)
- ✅ 不会沉迷(点到手酸自然停)
- ✅ 还能积累"功德"(虽然是虚拟的,安慰一下自己)
用Trae开工!
说干就干,打开Trae,新建文件夹tech-woodfish
,开整!

第一版,缺乏灵魂,木鱼、音效都不行 果让断Trae替换一下

第一步:画个木鱼
最开始Trae直接画个圆形当木鱼。结果越看越不对劲------这哪是木鱼,分明是个发光的汤圆!
于是花了半小时研究真实木鱼长啥样,用SVG画了个有模有样的:

第二步:让它响起来
用Web Audio API合成音效,最开始调出来的声音像是微波炉在唱歌。调试了N次,终于调出了那种"咚~"的木质共鸣感。
音效调试血泪史:
- 频率200Hz → 像蚊子叫
- 频率80Hz → 像低音炮
- 最终180Hz + 泛音540Hz → 完美!
第三步:加点特效
单纯的点击太无聊,必须整点花活:
- 霓虹发光:点击时爆发七彩光芒
- 粒子爆炸:每次敲击都有小星星散开
- 等级系统:功德1000次解锁"小有所成"
- 成就系统:"手速惊人"成就get✓
第四步:数据不能丢
写了半天,刷新页面数据清零?不存在的!
javascript
// 数据持久化,妈妈再也不用担心我白敲了
localStorage.setItem('totalMerit', this.totalMerit);
localStorage.setItem('level', this.level);

成品展示
最终效果:赛博朋克风电子木鱼
- 背景:星空粒子动画
- 木鱼:会发光的3D木鱼

- 音效:科技感+木质感的完美结合
- 统计:今日功德、总功德、等级一目了然

- 自动模式:手累了?让它自己敲!

使用体验
第一天: "我就试试,敲几下就好", "不知不觉敲了3000下,手有点酸"
一周后: "今天功德还没满,再敲100下吧"
副作用: 现在看到圆形物体就想点击...啊哈哈哈哈
Trae使用的技术栈
- 前端:HTML + CSS + JavaScript
- 动画:requestAnimationFrame + Canvas
- 音效:Web Audio API
- 存储:localStorage
- 开发工具:Trae(必须给Trae打call!)
彩蛋
偷偷告诉你:连续点击1000次会触发隐藏特效哦~(我已经触发3次了,手指已废)
最后的话:
写这个电子木鱼的初衷是为了打发无聊,结果反而更忙了------因为要不断优化、添加新功能、调试音效...
但是!当你看到"功德+1"的动画时,那种满足感是刷短视频永远给不了的。
毕竟,自己亲手使用Trae创造的东西,怎么玩都不觉得无聊。