使用方法
- 打开页面已预载「4-7-8 呼吸法」:吸气 4 秒、屏息 7 秒、呼气 8 秒、呼后屏息 0 秒,循环 4 轮。直接点「开始」就能跟着提示音做。
- 想换方法,下拉「呼吸法预设」选「盒式呼吸 4-4-4-4」,四段会一起变成 4 秒,每轮 16 秒;选「自定义」则手动填每一段。
- 在任意数字框里按 Enter 会直接开始或暂停。建议先开「节拍提示音」,每段切换时浏览器会响一声,吸气高音、屏息中音、呼气低音。
- 中途想停下点「开始」变「暂停」;想回到默认示例点「载入示例」。轮数走完会停在「完成」并提示总时长。
- 把灯调暗、背挺直,先呼尽肺里余气再开始第一轮吸气,比硬着头皮计时更容易进入状态。
这个呼吸训练计时器能解决什么问题
一是把「我要放松一下」变成可执行的节拍。人对「还有几秒吸气」的判断远不如看一个倒计时牌准,呼吸训练计时器把抽象的放松意图换成「吸气 4 秒、屏息 7 秒、呼气 8 秒」的具体动作。
二是固定呼气长于吸气,帮副交感神经占上风。4-7-8 里呼气 8 秒比吸气 4 秒长一倍,延长呼气是被反复提到的让心率慢下来的做法;盒式呼吸四段等长,则适合在焦虑时把注意力锚在「数拍子」上。
三是让「练了多久」可计量。一轮 19 秒、一圈 4 轮约 1 分 16 秒,页面上的「已完成轮数」只增不减,睡前做 8 轮就是明确的 2 分 32 秒练习量,比「好像做了会儿」可靠。
本页不做这些事:不统计你每天的呼吸曲线并画图,不连蓝牙血氧仪,也不播放背景白噪音。它只负责把节拍走准、在切换点给提示音,并把总时长交回给你。
原理:三段节拍与 performance.now() 时间戳差计时
每段时长怎么来。呼吸法里最通行的是 4-7-8(由 Andrew Weil 推广,源自瑜伽调息):吸气 4 秒、屏息 7 秒、呼气 8 秒,三段相加 19 秒为一轮;盒式呼吸(box breathing,美军与消防常用)四段等长 4-4-4-4,相加 16 秒为一轮。本页把这两条写死成预设,自定义时四段各自独立。
总时长就是加法。一轮秒数 = 吸气 + 屏息(吸后) + 呼气 + 屏息(呼后);总秒数 = 一轮秒数 × 轮数。4-7-8 跑 4 轮 = 19 × 4 = 76 秒(约 1.27 分钟),盒式跑 4 轮 = 16 × 4 = 64 秒(约 1.07 分钟)。这条公式没有近似,直接相乘即可。
计时用 performance.now() 时间戳差,不用计数器自减。开始一段时记下 phaseStart = performance.now(),之后每 200 毫秒刷新一次,剩余时间一律现算:left = dur - (performance.now() - phaseStart)。performance.now() 是单调时钟,单位毫秒、精度可达亚毫秒级,切换标签页被节流只会影响「多久刷新一次」,不影响「真实过了多久」。
为什么不直接每秒减 1。前台里 setInterval(200) 每分钟约触发 240 次,单次回调最多被事件队列推迟约 4 毫秒;用时间戳差,1 分钟误差趋近于 0,只受取整粒度约 ±4 毫秒影响。若改用「每次减 1 秒」的累加写法,标签页进入后台被节流到每分钟约 1 次时,1 分钟只前进 1 秒,漂移约 59000 毫秒(≈59 秒)——呼吸节拍会整体跑飞。
提示音用 Web Audio 现生成。每段切换调用 AudioContext 的振荡器发一个 0.3 秒正弦音,吸气 440Hz、屏息 550Hz、呼气 330Hz,不引任何外部音频文件。浏览器要求音频在用户点击后才能启动,所以提示音在第一次点「开始」时才创建 AudioContext;不支持的浏览器会提示改用画面文字跟随。
完整示例(默认 4-7-8 × 4 轮)
下面按默认参数走一遍,条件与打开页面时的默认值完全一致:吸气 4、屏息 7、呼气 8、呼后屏息 0,循环 4 轮。时间轴是:
- 第 1 轮:吸气 0~4 秒,屏息 4~11 秒,呼气 11~19 秒;
- 第 2 轮:19~38 秒,结构同上;
- 第 3 轮:38~57 秒;
- 第 4 轮:57~76 秒,结束。
全程封闭在 76 秒(约 1 分 16 秒)上,此时「已完成轮数」显示 4 / 4。若换成盒式 4-4-4-4 × 4 轮,则每轮 16 秒,全程 64 秒(约 1 分 4 秒)——两个示例和下一节的对照表逐位一致。
呼吸法与每轮时长对照表
下表给出两种方法的每段配置、每轮秒数,以及 4 / 8 / 12 轮的总时长,方便你先挑节奏再开练:
| 呼吸法 | 每段(秒) | 每轮 | 4 轮 | 8 轮 | 12 轮 |
|---|---|---|---|---|---|
| 4-7-8(默认) | 吸4 / 屏7 / 呼8 / 屏0 | 19 秒 | 76 秒(1.27 分) | 152 秒(2.53 分) | 228 秒(3.80 分) |
| 盒式呼吸 4-4-4-4 | 4 / 4 / 4 / 4 | 16 秒 | 64 秒(1.07 分) | 128 秒(2.13 分) | 192 秒(3.20 分) |
把轮数拉到 8 或 12,4-7-8 分别是 2 分 32 秒、3 分 48 秒;盒式是 2 分 8 秒、3 分 12 秒。练习密度由轮数决定,单轮时长由呼吸法决定,两者相互独立。
输入范围、边界与精度说明
- 吸气与呼气各 1~60 秒。少于 1 秒没有练习意义,大于 60 秒普通人难以维持,提交 0、负数、小数或空值都会被拒绝并提示具体范围。
- 两段屏息各 0~60 秒。允许填 0,因为 4-7-8 的「呼后屏息」就是 0(呼气完直接下一轮吸气);盒式呼吸则四段都填 4。
- 循环轮数 1~100 轮。上限 100 是为了不让单次练习超过约半小时而失去节奏感;下限 1 表示只做一轮。
- 四段全是 0 会拒绝。若吸气、屏息、呼气都为 0,页面提示「至少需要一段大于 0 秒」,因为没有任何节拍可走。
- 后台节流让刷新变稀,但不让时间走慢。用 performance.now() 时间戳差,切回前台那一瞬剩余时间立刻被算回真实值;累加式写法在相同情况下会少记约 59 秒。
- 用的是单调时钟。performance.now() 在合盖睡眠期间会暂停,所以「睡了 2 小时再开」不会被算进练习时长——这正符合「设备真正运行了多久」的语义;若你要的是墙钟日历时间请用闹钟类工具。
- 提示音仅在已授权音频的页面有效。部分浏览器对 file:// 或某些内嵌环境禁用 AudioContext,此时页面文字阶段仍可跟随,只是没有声音。
常见问题
4-7-8 和盒式呼吸到底该选哪个?
看你要什么:4-7-8 的呼气(8 秒)明显长于吸气(4 秒),适合睡前把心率压下来;盒式四段等长,适合焦虑时用「数四拍」把注意力锚住。两者都是固定节拍,换的只是数字,本页都能跑。
还没选呼吸法就点了开始会怎样?
页面默认已载入 4-7-8,所以不会「没选」。若你手动把吸气、屏息、呼气都清空或填 0,点开始会弹出红色提示「至少需要一段大于 0 秒」,并停在待机状态,不会凭空计时。
切到别的标签页计时会不会走慢?
不会。剩余时间每次刷新都用 performance.now() 时间戳差现算,浏览器压低的是「多久刷新一次」,不是「时钟走多快」。代价只是阶段切换的提示音可能晚几秒响,切回前台立即纠正。
提示音没响是哪里的问题?
先确认「节拍提示音」勾选了;再确认不是 file:// 或禁音环境。第一次必须点过「开始」浏览器才允许出声,若仍无声,页面会提示改用文字阶段跟随,计时不受影响。
这组数字(4、7、8)是硬性规定吗?
不是。4-7-8 是条易记的基准线,屏息 7 秒对初学者可能偏长,可改 4-4-6 或 4-2-6 起步;盒式出生就是 4-4-4-4,也可改 3-3-3-3。只要四段加起来是一轮、轮数乘出来是你想要的时长即可。
一天练几轮算合适?
没有统一标准。睡前做 4~8 轮(4-7-8 约 1.3~2.5 分钟)是常见起步量;盒式常做 4 轮一组、间歇重复。页面只累计「已完成轮数」,做多少由你定,不必追数字。
能不能把它当普通计时器或秒表用?
它按「吸气—屏息—呼气」的固定节拍循环,不是通用倒计时。要按某个截止时刻提醒用倒计时类工具,要测一段真实耗时用秒表类工具;本页只负责呼吸节拍引导。
关掉页面练习记录会留着吗?
不会。计时状态只存在当前页面内存,刷新或关闭即清空,这是刻意的——本页不保存任何记录。想留痕可把完成的轮数记到在线记事本里。
相关工具
- 在线记事本:把每天完成的呼吸轮数记下来,凑成可回顾的练习日志。
- 闹钟:设定固定时刻提醒自己该做呼吸练习,适合把放松排进日程。
- 在线节拍器:按 BPM 走拍的节奏工具,和本页的呼吸节拍是两套不同用途的「打拍子」。
- HIIT间隔训练计时器:高强度间歇的「运动—休息」分组节拍,和本页同属循环节拍思路,但对象是身体训练。
- 时薪计时器记录:按小时累计专注时段,若想把放松练习一并计入每日节奏可配合它用。