【JavaScript】定时器的使用

本文详细介绍了JavaScript中的定时器setInterval和setTimeout的基本用法,以及如何清除它们。通过实例演示了如何在发送验证码和秒杀倒计时场景中运用定时器。
摘要由CSDN通过智能技术生成



提示:以下是本篇文章正文内容,下面案例可供参考

一、JS定时器是什么?

JavaScript定时器是一种用于在指定时间间隔后执行指定函数的方法。

二、定时器的使用

1.定时器之setInterval

代码如下(示例):

<script>
        // 1. setInterval 每隔一段时间就去调用这个回调函数 重复调用
        // 语法规范: window.setInterval(回调函数,间隔时间)
        setInterval(function () {
            console.log('继续输出')
        }, 2000);
        //2. setTimeout 延时时间到了,就去调用这个回调函数,只调用一次,就结束了

    </script>

2.定时器之setTimeout

代码如下(示例):

<script>
        //setTimeout
        //语法规范:window.setTimeout(回调函数,延迟时间)
        //1. window在调用时可以省略
        //2. 延时时间单位是毫秒 可以省略 省略默认是0
        //3. 调用函数可以直接写函数 还可以写函数名 还有一个写法 '函数名()'
        //4. 页面中可能有很多定时器 我们经常给定时器加标识符 (名字)
        // setTimeout(function () {
        //     console.log('2000毫秒后执行')
        // },
        //     2000);
        function boom() {
            console.log('爆炸了');
        }
        var timer1 = setTimeout(boom, 2000);
        var timer2 = setTimeout(boom, 3000);
        // setTimeout('boom()', 2000); // 不提倡这个写法
    </script>

setTimeout 是用于延迟单次执行,而 setInterval 用于周期性重复执行。

3.清除定时器clearInterval

代码如下(示例):

<body>
    <button class="begin">开启定时器</button>
    <button class="stop">清除定时器</button>
    <script>
        let begin = document.querySelector('.begin');
        let stop = document.querySelector('.stop');
        let timer = null;
        begin.onclick = function () {
            timer = setInterval(function () {
                console.log('定时器执行了');
            }, 1000);
        }
        stop.onclick = function () {
            clearInterval(timer);
        }
    </script>
</body>

4.清除定时器clearTimeout

代码如下(示例):

<body>
    <button>点击停止定时器</button>
    <script>
        let btn = document.querySelector('button');
        let timer1 = setTimeout(function () {
            console.log('2000毫秒后执行')
        }, 2000);
        btn.addEventListener('click', function () {
            clearTimeout(timer1);
        })
    </script>
</body>

二、定时器实例一(发送验证码)

代码如下(示例):

<body>
    手机号:<input type="text" id="phone">
    <button id="btn">发送验证码</button>
    <script>
        //按钮点击之后,会禁用disabled属性为true
        //同时按钮里的内容会变化,注意button里面的内容通过innerHTML修改
        //里面秒数的变化需要用到定时器
        //定义一个变量,在定时器里,不断递减
        // 如果变量为0 说明到了时间 需要停止定时器 并且复原按钮初始状态
        let btn = document.getElementById('btn');
        let time = 10;
        btn.addEventListener('click', function () {
            btn.disabled = true;
            let timer = setInterval(function () {
                if (time == 0) {
                    // 清除定时器和复原按钮
                    clearInterval(timer);
                    btn.disabled = false;
                    btn.innerHTML = '发送验证码';
                    time = 10;  //重新开始
                } else {
                    btn.innerHTML = time + 's后重新发送';
                    time--;
                }
            }, 1000);
        })
    </script>
</body>

实现效果
在这里插入图片描述

三、定时器实例二(秒杀倒计时)

这段代码实现了点击按钮后开始倒计时,倒计时期间按钮不可点击,倒计时结束后恢复可点击状态并可以再次发送验证码的功能。
1、先获取页面中的按钮元素,并添加点击事件监听器。
2、当按钮被点击时:立即禁用按钮(btn.disabled = true),防止用户短时间内频繁点击。
3、初始化倒计时时间为10秒,并启动定时器。定时器每1000毫秒(1秒)执行一次回调函数
let inputTime = +new Date(‘2024-03-29 18:00:00’);
修改具体时间,设置倒计时
代码如下(示例):

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .hour,
        .minute,
        .second {
            display: inline-block;
            width: 30px;
            height: 30px;
            border-radius: 10%;
            color: white;
            background-color: black;
            text-align: center;
            line-height: 30px;
        }
    </style>
</head>

<body>
    <div><span class="hour">1</span>
        <span class="minute">2</span>
        <span class="second">3</span>
    </div>
    <script>
        // 1.获取元素
        let hour = document.querySelector('.hour');
        let minute = document.querySelector('.minute');
        let second = document.querySelector('.second');
        let inputTime = +new Date('2024-03-29 18:00:00'); //返回用户输入时间总的毫秒数
        // 2.开启定时器
        setInterval(countDown, 1000);
        // 3.定义函数
        function countDown() {
            let nowTime = +new Date(); //返回当前时间总的毫秒数
            let times = (inputTime - nowTime) / 1000; //返回剩余时间的秒数
            let h = parseInt(times / 3600 % 24); //小时
            h = h < 10 ? '0' + h : h;
            hour.innerHTML = h; //把小时赋值给hour
            let m = parseInt(times / 60 % 60); //分钟
            m = m < 10 ? '0' + m : m;
            minute.innerHTML = m;
            let s = parseInt(times % 60); //秒
            s = s < 10 ? '0' + s : s;
            second.innerHTML = s;
        }

    </script>
</body>

</html>

在这里插入图片描述


  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaScript中,常用的定时器方法有四个:setTimeout、setInterval、clearTimeout和clearInterval。 setTimeout函数用于在指定的时间后执行一次JavaScript代码。它的格式为setTimeout("js语句", 定时时间),其中定时时间的单位是毫秒。例如,使用setTimeout的语法如下: setTimeout(function(){ console.log("炸弹定时器,到达时间后执行"); }, 5000); 这段代码会在5秒后执行一次console.log语句。 setInterval函数用于按照指定的时间间隔重复执行一段JavaScript代码。它的格式为setInterval(函数, 时间),其中时间的单位是毫秒。例如,使用setInterval的语法如下: var i = 0; setInterval(function(){ console.log(i); i++; }, 1000); 这段代码会每隔1秒钟输出一次i的值,并将i的值加1。 如果需要停止定时器的执行,可以使用clearTimeout和clearInterval函数。它们的格式分别为clearTimeout(需要停止的对象)和clearInterval(需要停止的对象)。例如,使用clearTimeout和clearInterval的语法如下: var num1 = setTimeout(function(){}, 时间); var num2 = setInterval(function(){}, 时间); clearTimeout(num1); clearInterval(num2); 这段代码会先定义两个定时器对象num1和num2,然后通过调用clearTimeout和clearInterval函数来关闭对应的定时器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [简述js定时器的用法](https://blog.csdn.net/suorce/article/details/82841781)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Javascript定时器使用方法](https://blog.csdn.net/qq_57340195/article/details/124441862)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值