js倒计时

 这里说一下,下面写的倒计时其实并不一定要创建一个日期格式对象,这里用到这个是因为最近学了Date的一些函数,其实创建一个字符串就可以了,就像倒计时App中那样填写时分秒即可。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    倒计时
    <span>0</span>
    <span>0</span>:
    <span>0</span>
    <span>0</span>:
    <span>0</span>
    <span>0</span>
</body>

</html>
<script>
    var oSpan = document.getElementsByTagName("span");
    //创建指定日期对象,其实这里也可写一个字符串,获取字符串中的每两位赋值给下面的_h/_m/_s即可
    var date = new Date("2021-10-28,0:1:2");
    //调用倒计时函数countdown(date)
    date = countdown(date);
    
    function countdown(date) {
        //获取时分秒的数值并调用toTwo(value)函数,
        //判断时分秒是否为两位数,如果是个位数就要在前面加一个字符串"0",
        //是为了符合时间的格式
        var _h = toTwo(date.getHours());
        var _m = toTwo(date.getMinutes());
        var _s = toTwo(date.getSeconds());
        //将时分秒的数值组成一个字符串,便于后续使用
        var str = _h + _m + _s;
        return str;
    }
    //判断是否为两位数
    function toTwo(value) {
        return value >= 10 ? value+"" : "0" + value;
    }
    //创建date1的原始值为空
    var date1 = "";
    //1秒循环一次的循环定时器setInterval,命名为time,
    //为能够关闭定时器而命名,也就是关闭定时器的钥匙
    var time = setInterval(function () {
        //如果data1有值,就将data1的值赋给data
        //这里是为了第一次循环时,不改变data值,能够直接使用data值
        if(date1!=""){
            date = date1;
        }
        //给每一个span中赋data每一位的值,也就是将data的值打印在浏览器页面中
        //如date = "191212",倒计时就是从19小时12分钟12秒开始,并显示在页面上
        for (var i = 0; i < date.length; i++) {
            oSpan[i].innerHTML = date[i];
        }
        //将date中的数值拆分分别赋值给时分秒
        var s = date[4]+date[5];
        var m = date[2]+date[3];
        var h = date[0]+date[1];
        //这里开始对静态数据做倒计时
        //如果秒数在1-59之间,就每一秒-1
        if(s>0&&s<60){
            s = s/1;
            s--;
        }else{  //秒数为0,或者秒数已经减为0时,开始判断分钟数
            //如果分钟数在1-59之间,就每60秒-1(每当秒数减为0时,m-1,也就是每分钟-1啦)
            if(m>0&&m<60){
                m = m/1;
                m--;
                //这时时钟的秒数已经为0啦,这里就要给秒再赋一个59的值,用来在下一分钟继续s--
                s=59;
            }else{  //如果小时数大于1,就要每60分钟减一
                if(h>1){
                    h = h/1;
                    h--;
                    //这时时钟的秒数和分钟数都已经为0啦,这里就要给秒和分钟再赋一个59的值,
                    //用来在下一分钟继续s--,在下一小时继续m--
                    m=59;
                    s=59;
                }else if(h=0){  //如果h=0,就说明倒计时已经在一个小时以内了,只剩下分钟和秒数还没有走完
                    if(m!=0&&s!=0){ //如果倒计时本身设置的时间就在一个小时以内,那么分钟数和秒数就用给定的数值即可
                        m = m;
                        s = s;
                    }else{//如果倒计时是从一个小时以上的时间由h--减到h = 0,那么分钟数和秒数就要从59开始减减啦
                        m=59;
                        s=59;
                    }
                }else{ //h<0时,分钟数和秒数也一定都小于0了,这是就关闭定时器,倒计时结束啦!
                    clearInterval(time);
                }
            }
        }
        //将数值转为数字类型
        s = s/1;
        m = m/1;
        h = h/1;
        //再次调用toTwo()函数,判断是否需要+"0"
        date1 = toTwo(h)+toTwo(m)+toTwo(s);
        // console.log(date);
    }, 1000)  
</script>

看到其他人的方法,是用一个未来的时间减掉new Date()获得一个时间戳,由于new Date()的数值是一直增加的,时间戳就会一直减小,用循环定时器来自动获取新的new Date(),直到new Date()达到了一开始创建的那个未来的时间,倒计时即结束。但我觉得这种方法更像是闹钟一点,跟倒计时的理念有一点偏差(srds 呈现的结果是一样的,那个方法代码量是真的少)。

今天不开心。

而且早上发现feiq里的群不见了,离谱得很。

希望下次看到这里我已经不记得自己为什么不开心了。

就这样吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值