一款完全离线、基于科学算法的微信小程序,帮你见证身体每一天的积极变化。
为什么要做这个?
戒烟这件事,说难不难,说容易也不容易。市面上的戒烟 App 要么广告满天飞,要么把数据上传到云端让你心里不踏实。我就想做一个纯粹的工具——不需要注册、不需要联网,所有数据都在你自己的手机里,删了小程序就什么都没了。
于是有了微信小程序 「不抽就是赢」。
🏠 首页:一屏掌控核心操作
打开小程序就是四个核心按钮,设计思路是 "行为即记录":
| 操作 | 功能 | 触发效果 |
|---|---|---|
| 🚬 点一根 | 从当前烟盒扣支数,记录吸烟 | 烟雾粒子动画(负面视觉强化) |
| 🛡️ 忍住 | 想抽但忍住了,记录克制 | 赛博庆祝粒子动画(正向激励) |
| 🤝 吸别人的 | 记录吸烟但不扣自己烟盒 | 无特效(中性记录) |
| 🎁 递烟 | 从自己烟盒扣支数但不记录吸烟 | 烟盒库存减少 |
首页顶部展示戒烟天数、省下金额、未吸烟支数这三个核心指标。烟盒剩余支数一旦用完,会自动归档并提示开新盒。
这里有个有趣的设计:烟雾动画是负反馈——它让你直观地看到每吸一根烟带来的污染感;而忍住时的庆祝动画是正反馈——颜色从蓝色渐变到金橙色,粒子从中心炸开,像烟花一样。
📊 记录页:数据驱动的自省
使用柱状图 + Canvas 折线图双重视图展示近 7 天的吸烟趋势:
- 柱状图:每天吸烟支数,今天高亮为橙色渐变
- Canvas 折线:数据点连线,趋势一目了然
- 日历组件:打卡视图,有记录的日期标绿/橙圆点
月度统计更是一针见血:零吸烟天数、吸烟天数、总吸烟量、最大连续戒烟天数——四个数字,你的月度表现一目了然。
❤️ 健康页:科学的身体恢复模型
这是整个小程序的灵魂模块。
综合健康评分
纯 CSS 实现的环形进度图,按权重综合 7 大系统恢复百分比计算:
| 身体系统 | 恢复标准 | 权重 |
|---|---|---|
| 一氧化碳清除 | 8小时 | 15% |
| 心率血压 | 24小时 | 20% |
| 肺功能 | 90天 | 20% |
| 味觉嗅觉 | 48小时 | 5% |
| 循环系统 | 14天 | 15% |
| 免疫系统 | 180天 | 10% |
| 心血管疾病风险 | 365天 | 15% |
每个系统都有进度条和科学说明。比如一氧化碳清除:使用 Sigmoid 函数(100 / (1 + e^(-k*(ratio - 0.5))))模拟非线性恢复曲线,而非简单线性——生理恢复本来就是先快后慢的过程。
恢复系数 & 吸烟等级
算法会根据包年史(pack-year)动态调整恢复时间:
| 吸烟等级 | 包年 | 恢复系数 | 影响 |
|---|---|---|---|
| 轻度 | < 5 | 1.0× | 标准恢复 |
| 中度 | 5-15 | 1.3× | 恢复延后 30% |
| 重度 | 15-30 | 1.6× | 恢复延后 60% |
| 极重度 | > 30 | 2.0× | 恢复延后 100% |
而且恢复系数不是一成不变的——戒烟时间越长,系数越趋近于 1.0。超过 5 年后,系数影响仅保留 20%。
12 个恢复里程碑
从"20 分钟心率恢复正常"到"10 年肺癌风险减半",12 个阶梯式里程碑——每个里程碑的时间都根据你的吸烟等级动态调整。重度吸烟者的"肺功能提升"不再是标准 30 天,而是 48 天。
⚙️ 设置页:一切由你掌控
- 烟盒管理:拍照记录烟盒,支持细支/中支/正常三种规格,自动统计总花费
- 戒烟设置:戒烟日期、每日吸烟数、吸烟年限、模拟燃烧时长
- 数据管理:一键重置所有数据
- 隐私声明:明文标注"完全离线,数据仅存储在您的设备中"
🎨 UI 设计:iOS 26 Liquid Glass
整个界面采用 iOS 26 的 Liquid Glass(液态玻璃) 设计语言:
- 磨砂玻璃卡片:
background: rgba(255,255,255,0.45)+ 微弱边框 - 渐变背景:页面背景从蓝紫渐变到暖橙,与 Day 1 的康复感呼应
- 微交互:条目点击有
hover-class缩放反馈,柱状图有弹性动画 - 字体排印:SF Pro 风格的数字化排版,数据用大号粗体,描述用小号灰色
🔒 隐私:真正的本地优先
这句话我写在了小程序设置页的底部:
本应用为完全离线的本地应用,所有数据仅存储在您的设备中,不会进行任何网络数据交互、上传或同步。
没有服务器、没有数据库、没有分析 SDK。你可以用抓包工具验证——这个小程序根本不发网络请求。
🛠 技术栈
前端框架:Vue 3 + Composition API
跨平台:uni-app(微信小程序 + H5)
动画:Canvas 2D API(烟雾粒子 / 庆祝粒子)
进度图:纯 CSS clip-path 环形图
存储:uni.storage(localStorage)
UI 风格:iOS Liquid Glass
- 微信小程序不支持
roundRect/ellipse,自己写了 Canvas 2D Polyfill requestAnimationFrame在部分小程序环境不可用,改用setInterval动画循环- 环形进度图不用 Canvas、不用 SVG(微信小程序不支持),纯 CSS 的
clip-path+rotate+overflow:hidden方案
🚀 使用方式
代码完全开源,你可以:
- 克隆项目,用 HBuilderX 导入
npm install安装依赖- 运行到微信小程序或 H5
项目结构清晰,4 个 Tab 页面 + store 状态管理,适合学习 Vue3 + uni-app 实战开发。
最后
戒烟这件事,数据不会骗人。当你能看到"今天忍住 3 次"、"省下 ¥128"、"肺功能恢复 42%"这些数字时,自控力就不再是一个模糊的概念,而是看得见的进步。
如果你也在戒烟,或者身边有人在戒烟,希望这个小工具能帮上忙。
不抽就是赢 — 科学戒烟,健康相伴 🚭