javascript / jquery倒计时器与JSfiddle的例子?

我正在构建一些东西,其中一个是倒数计时器,倒计时永远不会超过一个小时,所以我需要做的就是倒计时分钟和秒。

我有部分工作,但问题是前导零。 我让它在几秒钟内完成工作,但没有分钟。

看看我的例子http://jsfiddle.net/cgweb87/GHNtk/

JavaScript的

setInterval(function() { var timer = $('span').html(); timer = timer.split(':'); var minutes = timer[0]; var seconds = timer[1]; seconds -= 1; if (minutes < 0) return; if (minutes < 10 && length.minutes != 2) minutes = '0' + minutes; if (seconds < 0 && minutes != 0) { minutes -= 1; seconds = 59; } else if (seconds < 10 && length.seconds != 2) seconds = '0' + seconds; $('span').html(minutes + ':' + seconds); }, 1000); 

HTML

 10:10 

我想要发生的是倒数计时器可以在1小时内开始,它将以前导零(即这种格式)倒计时;

08:49 46:09

当它到达倒计时只是显示:

00:00

感谢任何输入,我不想使用插件,我想学习它。

setInterval返回稍后可用于clearInterval的标识:

 var interval = setInterval(function() { /* snip */ $('span').html(minutes + ':' + seconds); if (parseInt(minutes, 10) == 0 && parseInt(seconds, 10) == 0) clearInterval(interval); }, 1000); 

并且,为了避免不断增加的分钟 – 00000001:42 – 或者:

  1. 在前缀测试length.minutes更改为minutes.length
  2. 检索时将值转换为Numbers – var minutes = parseInt(timer[0], 10); – 只测试if (minutes < 10) ...

选择#2,这是一个更新: http : //jsfiddle.net/BH8q9/

检查一个字符串的长度,它不是

length.minutes length.seconds

它是

minutes.length seconds.length

对代码进行了一些简单的更改,它可以按照您的意愿运行:

 setInterval(function() { var timer = $('span').html(); timer = timer.split(':'); var minutes = timer[0]; var seconds = timer[1]; seconds -= 1; if (minutes < 0) return; if (seconds < 0 && minutes != 0) { minutes -= 1; seconds = 59; } else if (seconds < 10 && length.seconds != 2) seconds = '0' + seconds; if ((minutes < 10) && ((minutes+'').length < 2)) minutes = '0' + minutes; $('span').html(minutes + ':' + seconds); }, 1000); 

我将if((分钟<10)....线向下移动到分钟后发生 - = 1;否则在9:59,你不会得到额外的0.还有length.minutes是错误的方式,它需要是minutes.length - 但是为了确保它被视为一个字符串(有一个长度,而一个数字没有),我给它添加了一个空字符串,然后取了它的长度。这是((minutes+'').length < 2 (检查你有前导零)。这是实现它的最好方法,但它最接近你现有的代码。

我知道答案已经被接受但想要投入我的2c:我希望尽可能避免额外的编码。 使用Jonathan Lonowski的方法,我会改进它:

 var interval = setInterval(function() { var timer = $('span').html().split(':'); //by parsing integer, I avoid all extra string processing var minutes = parseInt(timer[0],10); var seconds = parseInt(timer[1],10); --seconds; minutes = (seconds < 0) ? --minutes : minutes; if (minutes < 0) clearInterval(interval); seconds = (seconds < 0) ? 59 : seconds; seconds = (seconds < 10) ? '0' + seconds : seconds; minutes = (minutes < 10) ? '0' + minutes : minutes; $('span').html(minutes + ':' + seconds); }, 1000);