在办公室坐久了浑身难受,做一个拉伸计时器,方便跟着运动
【摘要】 纯前端拉伸计时器,分步骤居家拉伸,每个动作独立倒计时,自动推进到下一步。技术内核是"步骤序列状态机"——当前步索引 + 每步剩余秒数 + 自动推进。
收藏了一堆拉伸动作,真做起就乱:这个做几秒?下个是什么?脑子记不住。写了个网页,把一套动作排好序,每个动作倒计时,时间一到自动跳下一个,全程不用我操心数数。这跟普通倒计时不一样——它是"一串步骤串起来自动走"。
一、本质是步骤序列状态机
普通倒计时只有"一个目标时间"。拉伸是"多个步骤,每步自己的时长,做完自动进下一步"。状态就两个:当前在第几步、这步还剩几秒。
const steps = [
{ name: '扩胸运动', sec: 30 },
{ name: '体侧伸展', sec: 30 },
{ name: '颈部绕环', sec: 20 },
{ name: '下蹲拉伸', sec: 25 },
];
let i = 0, left = 0, timer = null;
function runStep() {
if (i >= steps.length) { finish(); return; } // 全部做完
left = steps[i].sec;
tick();
}
function tick() {
show(steps[i].name, left);
if (left <= 0) { i++; runStep(); return; } // 这步结束,进下一步
left--;
timer = setTimeout(tick, 1000);
}
i 是步骤指针,left 是这步倒计时。每跳一步 i++ 再 runStep,到头了 finish()。这就是个最简单的有限状态机。
二、暂停和重来
function pause() { clearTimeout(timer); timer = null; }
function restart() { clearTimeout(timer); i = 0; runStep(); }
暂停只清定时器,保留 i 和 left;重来把指针归零。
三、步骤配置示意

四、每步时长怎么定
| 动作 | 建议时长 | 说明 |
|---|---|---|
| 扩胸/体侧 | 30s | 静态拉伸够久才有效 |
| 颈部绕环 | 20s | 动态,别太久 |
| 下蹲拉伸 | 25s | 慢起慢落 |
时长写在配置数组里,想加动作改数组就行,逻辑一行不用动。
小结
拉伸计时器是"步骤序列状态机":状态只有当前步索引 i 和本步剩余秒 left,每步倒计时归零就 i++ 推进到下一动作,全部走完触发结束。它和普通倒计时不同——后者只有单一目标,前者是多步串行自动播放。暂停只清定时器保留状态,重来归零指针。动作和时长写在配置数组里,加动作改数据不改逻辑。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)