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

关于倒计时的函数

关于倒计时的函数

刺槐少女 2018-04-03 17:28:24
<html>     <head>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />     <title>倒计时时钟</title>     <style>     body,div{margin:0;padding:0;}     body{color:#fff;font:16px/1.5 \5fae\8f6f\96c5\9ed1;}     #countdown{width:300px;text-align:center;background:#1a1a1a;margin:10px auto;padding:20px 0;}     input{border:0;width:283px;height:50px;cursor:pointer;margin-top:20px;background:url(img/btn-1.png) no-repeat;}     input.cancel{background-position:0 -50px;}     span{color:#000;width:80px;line-height:2;background:#fbfbfb;border:2px solid #b4b4b4;margin:0 10px;padding:0 10px;}     </style>     <script>     window.onload = function ()     {     var oCountDown = document.getElementById("countdown");      var aInput = oCountDown.getElementsByTagName("input")[0];     var timer = null;     aInput.onclick = function ()     {     this.className == "" ? (timer = setInterval(updateTime, 1000), updateTime()) : (clearInterval(timer));     this.className = this.className == '' ? "cancel" : '';      };     function format(a)     {     return a.toString().replace(/^(\d)$/,'0$1')     }     function updateTime ()     {     var aSpan = oCountDown.getElementsByTagName("span");     var oRemain = aSpan[0].innerHTML.replace(/^0/,'') * 60 + parseInt(aSpan[1].innerHTML.replace(/^0/,''));     if(oRemain <= 0)     {     clearInterval(timer);     return     }     oRemain--;     aSpan[0].innerHTML = format(parseInt(oRemain / 60));     oRemain %= 60;     aSpan[1].innerHTML = format(parseInt(oRemain));     }     }     </script>     </head>     <body>     <div id="countdown">     <span>01</span>分钟<span>40</span>秒     <input type="button" value="" />     </div>     </body>     </html>求解读上述三个函数,实在有点懵,尤其是input的点击事件中的两个三目运算,我试图改成if..else但是会有问题。
查看完整描述

2 回答

已采纳
?
CodeManDSH

TA贡献58条经验 获得超18个赞

三元运算 :    条件 true则执行 false 则执行;

if-else  :    if( 条件 ){ true则执行;  }else{   false则执行   }

其实一样的。

aInput.onclick 里面:

        1、进行了判断是否input有className 

                如果空就启动定时器,不为空时清除定时器 timer

        2、给input赋值className ,对应的值是:当前如果className空就赋值cancel,不空就赋值空。

同时,定时器绑定的是updateTime(  ) :

        1、获取了span标签,将两个span的中间内容取出并用正则替换,将开头的0替换成空,分钟*60+秒钟,就是一共几秒;

        2、如果小于等于0,清楚定时器,return结束函数

        3、继续执行的话,总秒自减,再利用format函数的正则替换,如果是一位数,则前面加上0再转string类型,int的话0开头输出又没了,format处理后返回给aSpan[0].innerHtml和aSpan[1].innerHtml;


定时器每秒执行一次

查看完整回答
1 反对 回复 2018-04-03
  • 刺槐少女
    刺槐少女
    我将两个三目改成了如下两个if else,但是总有一个不会执行,就是下面那个: if(this.className == ""){ timer = setInterval(updateTime, 1000), updateTime(); }else { clearInterval(timer); } if (this.className=this.className==''){ this.className=="cancel"; }else { this.className==''; }
  • CodeManDSH
    CodeManDSH
    第二个写错了好像,改这样子:if(this.className==''){ this.className="cancel"; }else { this.className=''; }
  • 刺槐少女
    刺槐少女
    这。。。见鬼了吧,我昨天也这样改过,也不执行,刚刚又改了一次,就执行了!谢谢大佬!大佬你看下私信?
?
北七哦

TA贡献33条经验 获得超4个赞

点击button时候出发onclick事件调用update(),然后update()调用fomat()。if else可以写啊,出现什么问题  看一下

查看完整回答
1 反对 回复 2018-04-03
  • 刺槐少女
    刺槐少女
    就是我改成if else之后,是把上面的语句改成了两个,然后总有一个不会执行
  • 北七哦
    北七哦
    可以写在一起吧,true跟false的时候调用跟赋值一起执行,都是this.className
  • 刺槐少女
    刺槐少女
    if(this.className == ""){ timer = setInterval(updateTime, 1000), updateTime(); }else { clearInterval(timer); } if (this.className=this.className==''){ this.className=="cancel"; }else { this.className==''; }
点击展开后面3
  • 2 回答
  • 0 关注
  • 1859 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信