原生JS实现倒计时和整点秒杀(详解)

前言:在电商平台我们经常能看到整点秒杀或者是倒计时秒杀,如何用原生的JS代码来实现这样的功能呢?

1.整点秒杀:

思路分析:(h,m,s)

  • 获取当前的时分秒 new Date()
  • s++
  • 如果 s > 59,s = 0, m++
  • m > 59,m = 0, h++
  • 如果hms < 10 ,前面加上0
  • 计算好时分秒赋值给页面的文本
  • 如果 h = 20 && m = 0 && s == 0 则清除定时器(因为我默认设为20:00:00)

代码如下:

<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <span id="currentTime"></span>
    <br>
    <span> 20:00:00结束</span>

    <script>
        let timeID = setInterval(() => {
            //箭头函数绑定this
            //(1)获取当前的时分秒 new Date()
            let date = new Date();
            let h = date.getHours();
            let m = date.getMinutes();
            let s = date.getSeconds();
            //(2)s++
            s++;
            //(3)如果 s > 59,s = 0, m++ 
            if (s > 59) {
                s = 0;
                m++;
            };
            //(4)如果 m > 59,m = 0, h++ 
            if (m > 59) {
                m = 0;
                h++;
            };
            //(5)如果hms < 10 ,前面加上0
            //这里不用转换,因为日期对象获取的就是number
            console.log(h, m, s);
            h = h < 10 ? '0' + h : h;
            m = m < 10 ? '0' + m : m;
            s = s < 10 ? '0' + s : s;
            //(6)计算好时分秒赋值给页面的文本
            document.getElementById('currentTime').innerText = h + ':' + m + ':' + s;
            //(7) 如果 h = 20 && m = 0 && s == 0 
            if (h == 20 && m == 0 && s == 0) {
                clearInterval(timeID);
            };
        }, 1000);
    </script>
</body>

</html>

2.倒计时秒杀:

  • 获取元素
  • 获取当前的时分秒
  • s--
  • 如果s < 0, s = 59, m--
  • 如果m < 0, m = 59, h--
  • 如果 m h s < 10,需要在前面加上0
  • 将计算好的时分秒赋值给页面元素的文本
  • 如果 h == 0 && m == 0 && s == 0,清除定时器

代码如下

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

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

<body>
    <span id="hour">01</span>:
    <span id="min">03</span>:
    <span id="sec">06</span>

    <script>
        //1.获取元素和文本
        let hour = document.getElementById('hour');
        let min = document.getElementById('min');
        let sec = document.getElementById('sec');

        //2.开启定时器
        let timeID = setInterval(()=> {
            //(1)获取当前时分秒
            let h = hour.innerText;//字符串
            let m = min.innerText;
            let s = sec.innerText;
            //(2)s--
            s--; //隐式转换  Number(s)--

            //(3)如果s  < 0, s = 59, m--
            if(s < 0){
                s = 59;
                m--;
            };

            // (4) 如果m < 0, m = 59, h--
            if(m<0){
                m = 59;
                h--;
            };
            //(5)如果 m h s < 10,需要在前面加上0
            /*字符串类型在和number计算之前,最好转成number 
             */
            s = parseInt(s);
            m = parseInt(m);
            h = parseInt(h);

            //  表达式?代码1:代码2
            s = s < 10?'0' + s:s;
            m = m < 10?'0' + m:m;
            h = h < 10?'0' + h:h;

            // (6) 将计算好的时分秒赋值给页面元素的文本
            hour.innerText = h;
            min.innerText = m;
            sec.innerText = s;
            // (7)如果 h == 0 && m == 0 && s == 0,清除定时器
            if(h == 0 && m == 0 && s == 0){
                clearInterval(timeID);
            };
        }, 1000);
    </script>
</body>

</html>

总结:倒计时和整点秒杀实现的逻辑略有不同,不过代码是比较相似的,欢迎各位大佬指正.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,845评论 0 17
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 12,983评论 0 13
  • 一步一步的搭建JAVA WEB项目,采用Maven构建,基于MYBatis+Spring+Spring MVC+B...
    叶子的翅膀阅读 14,369评论 5 25
  • (心态决定一切) 心若改变,你的态度跟着改变;态度改变,你的习惯跟着改变;习惯改变,你的性格跟着改变;性格改变,你...
    胖姑阅读 760评论 0 0