easytimer.js秒数超59自动重置,倒计时触发逻辑失效求助
问题原因分析
你遇到的问题核心在于对Timer库返回的秒数理解有误:timer.getTimeValues().seconds返回的只是当前分钟内的秒数(范围0-59),当定时器运行超过1分钟时,这个值会重置为0重新计数,而不是从启动开始的累计总秒数。
举个例子:当你设置timeToElapse = 59时,定时器运行到第60秒(也就是1分钟整),time.seconds会变成0,这时候你的判断time.seconds > 59显然不成立,反而会计算59 - 0 = 59,把倒计时又变回59,看起来就像定时器重置了。
解决方案
你需要改用累计总秒数来做判断,而不是当前分钟内的秒数。可以通过time.minutes * 60 + time.seconds计算总秒数,修改后的代码如下:
$("#start").click(function() { var timeToElapse = 59; // 现在可以设置任意数值,比如120、300都没问题 var timer = new Timer(); timer.start(); timer.addEventListener('secondsUpdated', function(e) { var time = timer.getTimeValues(); // 计算从定时器启动到现在的累计总秒数 var totalElapsedSeconds = time.minutes * 60 + time.seconds; // 用总秒数判断是否到达设定时间,改成>=避免刚好等于时遗漏触发 if (totalElapsedSeconds >= timeToElapse) { $('#hit').html('hit'); timer.pause(); } else { var remainingSeconds = timeToElapse - totalElapsedSeconds; $('#countdown').html(remainingSeconds); } }); });
额外说明
- 把判断条件从
>改成>=是为了确保当累计秒数刚好等于timeToElapse时,也能触发"hit"逻辑,避免差1秒的遗漏情况。 - 改用总秒数后,无论你设置的
timeToElapse是59、60还是更长的数值,倒计时都会准确计算剩余时间,到达设定值后也能正常触发暂停和文本更新。
内容的提问来源于stack exchange,提问作者ernest
相关产品推荐
相关产品推荐

