倒计基本原理:
其实就是获取两个时间的时间差,然后除1000换算成秒数,除60换算成分,除360换算成小时,除24*360换算成日
//这个函数是当前时间距离你选定的日期(函数的参数)相差的时间
function leftTime(year, month, day, hour, minute, second) {
//计算相差的毫秒数
var leftTime = (new Date(year, month-1, day, hour, minute, second)) - (new Date());
var days = parseInt(leftTime / 1000 / 60 / 60 / 24 , 10); //计算剩余的天数
var hours = parseInt(leftTime / 1000 / 60 / 60 % 24 , 10); //计算剩余的小时
var minutes = parseInt(leftTime / 1000 / 60 % 60, 10);//计算剩余的分钟
var seconds = parseInt(leftTime / 1000 % 60, 10);//计算剩余的秒数
days = checkTime(days);
hours = checkTime(hours);
minutes = checkTime(minutes);
seconds = checkTime(seconds);
var formString = days + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒'
//到以上步骤其实已经获取了可以树勇的数字,eg:01天20小时24分钟30秒
//下面这部分处理是将两位的数字分割成一位一位的,这样我就可以放到相应的地方
document.getElementsByClassName('hourFirst')[0].innerHTML = hours.toString().slice(0,1)
document.getElementsByClassName('hourSecond')[0].innerHTML = hours.toString().slice(1,2)
document.getElementsByClassName('minFirst')[0].innerHTML = minutes.toString().slice(0,1)
document.getElementsByClassName('minSecond')[0].innerHTML = minutes.toString().slice(1,2)
document.getElementsByClassName('secondFirst')[0].innerHTML = seconds.toString().slice(0,1)
document.getElementsByClassName('secondSecond')[0].innerHTML = seconds.toString().slice(1,2)
}
function checkTime(i){ //将0-9的数字前面加上0,例1变为01
if(i<10)
{
i = "0" + i;
}
return i;
}
setTimeout(function(){
leftTimer(2017,11,8,11,57,00)
},10)
setInterval(function(){
leftTimer(2017,11,8,11,57,00)
},1000)
需要注意的是:如果直接使用setInterval页面会在1秒以后才开始显示倒计时,这样体验很不好,所以我用了setTimeout时间设为10毫秒,其实就是想达到立即出发函数的效果,为什么不直接调用函数leftTimer()
是因为直接调用了 并没有解决这个问题,而且还造成了出现NaN的状况。