为了账号安全,请及时绑定邮箱和手机立即绑定

定时器清除不了

倒数到0的时候还在后台倒计时,根本停不下来,这样浏览器很容易崩溃吧,分别试了setTimeout和setInterval,定时器写里面外面都清不掉,是我写错了吗?望大神小神过来搭救~

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>团购——限时抢</title>
<!-- <link rel="stylesheet" href="style.css"  /> -->
</head>
<body>
<div class="content3">
<div class="time">还剩 <span id="LeftTime"></span></div>
</div>
<script>
window.onload=function(){
   FreshTime()
//   var sh;
//   sh=setInterval(FreshTime,500);
//   sh=setTimeout(FreshTime,500);     不能写函数外面,只调用一次!!
}
function FreshTime()
{
        var endtime=new Date("2017/1/7,10:31:40");//结束时间
        var nowtime = new Date();//当前时间
        var lefttime =parseInt((endtime.getTime() - nowtime.getTime())/1000);    
        var d = parseInt(lefttime/(24*60*60)); //把总共的秒数除以一天的秒数
        var h = parseInt(lefttime/(60*60)%24);  //取模得出当前剩下的小时数
        var m = parseInt(lefttime/60%60);  
        var s = parseInt(lefttime%60);       
        document.getElementById("LeftTime").innerHTML=d+"天"+h+"小时"+m+"分"+s+"秒";       
        if(lefttime<=0){
        document.getElementById("LeftTime").innerHTML="团购已结束";
//      clearTimeout(sh);
        clearInterval(sh);
        }  
//      sh=setTimeout(FreshTime,500);
        sh=setInterval(FreshTime,500); 
        console.log(d+"天"+h+"小时"+m+"分"+s+"秒");  //注意控制台的变化
}
</script>
</body>
</html>



正在回答

1 回答

window.onload = function() {
    FreshTime();
   }
   var sh;

   function FreshTime() {
    // clearInterval(sh);
    var endtime = new Date("2017/1/7,21:54:00"); //结束时间
    var nowtime = new Date(); //当前时间
    var lefttime = parseInt((endtime.getTime() - nowtime.getTime()) / 1000);
    var d = parseInt(lefttime / (24 * 60 * 60)); //把总共的秒数除以一天的秒数
    var h = parseInt(lefttime / (60 * 60) % 24); //取模得出当前剩下的小时数
    var m = parseInt(lefttime / 60 % 60);
    var s = parseInt(lefttime % 60);
    document.getElementById("LeftTime").innerHTML = d + "天" + h + "小时" + m + "分" + s + "秒";
    // sh = setInterval(FreshTime, 500);
    sh=setTimeout(FreshTime,500);
    if(lefttime <= 0) {
     document.getElementById("LeftTime").innerHTML = "团购已结束";
     clearTimeout(sh);
     // clearInterval(sh);
    }
    console.log(d + "天" + h + "小时" + m + "分" + s + "秒"); //注意控制台的变化
   }


这是你的代码修改后的,用setInterval容易导致定时器叠加,所以执行时要先清空一下,建议使用setTimeout,它只执行一次,最后定时器的设置位置需在判断之前,否则判断中定时器清除,而之后定时器又启动

0 回复 有任何疑惑可以回复我~
#1

emily973 提问者

非常感谢!差点忘记回复~
2017-01-09 回复 有任何疑惑可以回复我~
#2

littlemin 回复 emily973 提问者

可以解决就好
2017-01-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
倒计时效果
  • 参与学习       55626    人
  • 解答问题       242    个

电商网站限时抢购倒计时效果计算思路和方法,前端开发必备技术

进入课程

定时器清除不了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信