纯 HTML 无法实现步数录入与累计,必须结合 JavaScript 和 localStorage:页面加载时读取历史总步数(parseInt(localStorage.getItem("total_steps")) || 0),输入后存当日步数("steps_"+new Date().toDateString())并更新总步数,刷新不丢失。

怎么用纯 HTML + JavaScript 实现每日步数录入和累计显示
纯 HTML 做不了动态步数统计——它不支持数据存储和计算,必须搭配 localStorage 和少量 JavaScript。零基础也能写,核心就三件事:输入框收数、点击存进浏览器、刷新后还能读出来。
常见错误是只写了个 <input> 和 <button>,点完没反应,或者刷新页面步数归零。问题不在 HTML,而在没加 JS 逻辑和持久化处理。
- 用
<input type="number">限制只能输数字,避免用户乱填 - 绑定
onclick或addEventListener,别漏掉event.preventDefault()(尤其表单提交时) - 存数据必须用
localStorage.setItem("steps", value),读取用localStorage.getItem("steps") - 注意
localStorage只存字符串,读出来要parseInt()转成数字再累加
为什么每次刷新页面步数都变成 0?
因为没从 localStorage 初始化页面数据。页面加载时得主动去取,否则变量默认是 undefined 或 0,一算就错。
典型错误写法:let total = 0; 然后直接加新步数——这等于每次都从 0 开始加。
立即学习“前端免费学习笔记(深入)”;
- 正确做法:页面加载后立刻执行
const saved = localStorage.getItem("steps"); - 判断
saved !== null,再用parseInt(saved) || 0安全转数字 - 把结果赋给显示元素的
textContent,比如document.getElementById("total").textContent = total;
怎么区分“今日新增”和“历史累计”?
纯前端没法自动识别“今天”,但可以用 new Date().toDateString() 当作简易日期键。存两份数据:一份按日期存当天步数(如 "steps_2024-06-15"),一份存总步数("total_steps")。
容易踩的坑是想用 Date.now() 或时间戳当 key,结果每天生成新 key 却不清理旧的,数据越积越多还难查。
- 获取今日 key:
const todayKey = "steps_" + new Date().toDateString(); - 读今日步数:
localStorage.getItem(todayKey),不存在就当 0 - 更新总步数时,先读旧总值,再加当日新增,最后
setItem("total_steps", newValue) - 如果只要“今日新增”,就只操作
todayKey;要“所有历史”,就得遍历localStorage所有 key(不推荐,性能差)
移动端输入体验差?怎么让数字键盘自动弹出
不是所有手机都会为 <input type="text"> 弹数字键盘。必须明确声明类型,并加 inputmode 提升兼容性。
只写 type="number" 在 iOS Safari 有时仍弹全键盘,安卓部分浏览器也一样。
- 正确写法:
<input type="number" inputmode="numeric" pattern="[0-9]*" /> -
pattern="[0-9]*"是给老版本 iOS 做兜底(虽然 HTML5 不强制校验,但能触发数字键盘) - 别用
maxlength限制位数,步数可能上万,限制太死反而误伤 - 加
min="0"防负数,value="0"设默认值,减少用户首次操作成本
真正卡住零基础的,往往不是语法,而是没意识到“页面刷新=JS重跑=变量重置”。只要守住 localStorage 这个锚点,其他都是填空题。日期逻辑、累计方式、输入优化,全在这一层之上叠加,别一上来就想做图表或同步服务器。



















