原生js实现自定义倒计时(包含暂停、继续)

3 篇文章 0 订阅
2 篇文章 0 订阅

最近在学习js,想用js做一些简单的小案例,说干就干!
这一篇就是用js实现自定义倒计时。用到的html和css不多,所以界面很简单,主要看功能。
主要用到js的timing,就是setInterval(),clearInterval(),也涉及读取用户输入的数据等。

界面图:

在这里插入图片描述

首先是html和CSS(行内样式):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript 语言之倒计时工具训练</title>
</head>
<body>
    <h1>JavaScript实例--倒计时</h1>
    <div>
        <input type="number" id="hour" style="width: 35px;"><input type="number" id="min" style="width: 35px;"><input type="number" id="sec"  style="width: 35px;"><button id="start" onclick="doStart()">开始</button>
        <button id="pause" onclick="doPause()">暂停</button>
        <button id="continue" onclick="doContinue()">继续</button>
    </div> 
    
    <span id="clock" style="font-size: 3em">
        <!-- 00:00:00 -->
        <b>00</b>:<b>00</b>:<b>00</b>
    </span>

</body>

input的type是number,其实text也可以,看个人。

JS:

<script>
    //定义总时间,定时器变量
    var sumTime,time;
    // 获取三个input标签
    var hour = document.getElementById('hour');
    var min = document.getElementById('min');
    var sec = document.getElementById('sec');
    // 获取b标签
    var b = document.getElementsByTagName('span')[0].getElementsByTagName('b')
    console.log(document.getElementsByTagName('span'))

    function doStart(){
        // 获取输入框的value值
        var h1 = parseInt(hour.value);
        var m1 = parseInt(min.value);
        var s1 = parseInt(sec.value);
        // 计算总时间
        sumTime = h1*60*60 + m1*60 + s1;
        document.getElementById('start').setAttribute('disabled','disabled')

        // 知识点解析:
        // setAttribute() 方法添加指定的属性,并为其赋指定的值。
        // 参数   类型  描述
        // attributename   String  必需。您希望添加的属性的名称。
        // attributevalue  String  必需。您希望添加的属性值。

        //调用计算时间的方法 
        onTimer()
    } 
    // 计算时间的方法

    function onTimer(){
        // clearInterval(time);
        time = setInterval(function () {
          // 当总时间为0,倒计时结束
          if (sumTime === -1) {
            clearInterval(time);
            window.alert("定时结束!");
            document.getElementById('start').removeAttribute('disabled')

            // 知识点解析:
            //  removeAttribute() 方法删除指定的属性
            // 参数  类型  描述
            // attributename   String  必需。规定要删除的属性的名称。

          } else {

            // (1)当总时间不为0,计算当前时间,并显示在页面上
            h = Math.floor(sumTime / (60 * 60));
            m = Math.floor(sumTime / 60) - (h * 60);
            s = Math.floor(sumTime) - (h * 60 * 60) - (m * 60);
            // 补零
            if (h <= 9) h = '0' + h;
            if (m <= 9) m = '0' + m;
            if (s <= 9) s = '0' + s;
            console.log(h,m,s)
            b[0].innerHTML = h;
            b[1].innerHTML = m;
            b[2].innerHTML = s;
            // (2)并做-1操作
            sumTime--;
          }
        }, 1000);
    }
    // 点击暂停
    function doPause(){
        // 清除定时器
        clearInterval(time);
    }
    // 点击继续
    function doContinue(){
        // 当总时间不存在的时候
        if(sumTime == undefined){
            alert('请先开始倒计时')
        //存在的时候,继续执行时间计算的方法 
        }else{
             onTimer()
        }
    }

</script>

以上就是本次倒计时的代码,大家可以看一看,如果发现有问题可以留言,本人是前端小白,我们讨论讨论,互相学习。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值