JavaScript学习笔记 06、DOM元素—③定时器与延时器(一)

简介: JavaScript学习笔记 06、DOM元素—③定时器与延时器(一)

一、定时器(√)


1.1、介绍定时器与清除定时器方法(含案例)


参考文章:window.setInterval-官方文档


设置定时器:setInterval()


js中我们通过使用setInterval()函数来实现定时功能!



函数参数:


hander:指的是你要调用的函数(匿名函数或者指定函数对象)。

timeout:间隔时间,以毫秒为单位,1000就表示1秒。

返回值:此返回值intervalID是一个非零数值(number),用来标识通过setInterval()创建的计时器,这个值可以用来作为clearInterval()的参数来清除对应的计时器 (使用一个全局变量来进行存储这个值)。


案例:



<body>
    <p id="m_p">0</p>
    <script>
        var m_p = document.getElementById("m_p");
        var a = 0;
        //方式一:在函数中添加一个匿名函数
        // setInterval(function () {
        //     a++;
        //     m_p.innerText = a;
        // }, 1000);
        //方式二:通过传入一个指定函数
        //①定义函数
        function addA() {
            a++;
            m_p.innerText = a;
        }
        //②将指定函数传入到setInterval()中
        setInterval(addA, 1000);
    </script>
</body>




清除定时器:clearInterval()



需要传入指定定时器生成的ID,执行该函数时就会删除指定ID的定时器。

测试demo:



<style>
    * {
        margin: 0;
        padding: 0;
    }
    p {
        margin-left: 30px;
    }
</style>
<body>
    <p id="m_p">0</p>
    <button>清除定时器</button>
    <script>
        var m_p = document.getElementById("m_p");
        var a = 0;
        //方式一:在函数中添加一个匿名函数
        var intervalID = setInterval(function () {
            a++;
            m_p.innerText = a;
        }, 1000);
        //清除定时器
        var m_button = document.getElementsByTagName("button")[0];
        m_button.onclick = function () {
            //清除定时器,传入指定定时器的ID
            clearInterval(intervalID);
        };
    </script>
</body>



1.2、解决按钮点击时设置定时器setInterval()的小问题


问题提出


问题描述:当我们在点击按钮事件下设置定时器,若是我们多次点击按钮,实际上就会创建多个定时器就会按照对应的时间间隔不断执行!此时作用效果就会叠加,原本1s进行+1的,连续点了多次创建了多个定时器就会1s连续加多次!



<body>
    <p id="m_p">0</p>
    <button>添加定时器</button>
    <script>
        var m_p = document.getElementById("m_p");
        var a = 0;//p标签起始值
        var intervalID;//使用一个全局变量来保存ID
        var m_button = document.getElementsByTagName("button")[0];
        //按钮绑定单击事件
        m_button.onclick = function () {
            intervalID = setInterval(function () {
                a++;
                m_p.innerText = a;
            }, 1000);
        };
    </script>
</body>


解决方案


解决方案应该有两种:①一旦点击了定时器,该按钮就锁定,无法点击了。②不锁定按钮方式,每点击一次就先清除上一次定时器!


这里的话就演示第二种方式:



<style>
    * {
        margin: 0;
        padding: 0;
    }
    p {
        margin-left: 30px;
    }
</style>
<body>
    <p id="m_p">0</p>
    <button>添加定时器</button>
    <script>
        var m_p = document.getElementById("m_p");
        var a = 0;//p标签起始值
        var intervalID;//使用一个全局变量来保存ID
        var m_button = document.getElementsByTagName("button")[0];
        m_button.onclick = function () {
            clearInterval(intervalID);//初次调用intervalID为undefined,传入清除函数也不会报异常
            intervalID = setInterval(function () {
                a++;
                m_p.innerText = a;
            }, 1000);
        };
    </script>
</body>




1.3、实际案例(设置与删除定时器)


需求:使用两个按钮来进行添加与删除定时器,定时器需要每秒对p标签中的值+1。



源码:


<style>
    * {
        margin: 0;
        padding: 0;
    }
    p {
        margin-left: 30px;
    }
</style>
<body>
    <p id="m_p">0</p>
    <button>添加定时器</button>
    <button>删除定时器</button>
    <script>
        var m_p = document.getElementById("m_p");
        var a = 0;//p标签起始值
        var intervalID;//使用一个全局变量来保存ID
        var m_add_button = document.getElementsByTagName("button")[0];
        var m_del_button = document.getElementsByTagName("button")[1];
        //添加定时器按钮绑定单击事件
        m_add_button.onclick = function () {
            clearInterval(intervalID);//初次调用intervalID为undefined,传入清除函数也
            intervalID = setInterval(function () {
                a++;
                m_p.innerText = a;
            }, 1000);
        };
        //删除定时器按钮绑定单击事件
        m_del_button.onclick = function () {
            clearInterval(intervalID);
        }
    </script>
</body>




二、延时器(√)


介绍


与定时器大致相同,同样有设置与添加延时器!





语法:


设置延时器:setTimeout(),设置一个延时器,只有当指定时间到了之后会执行函数一次,不会再重复执行。

清除延时器:clearTimeout(),可以清除延时器,与clearInterval()大致相同同样需要传入对应的延时器ID。


示例


需求:点击添加延时器,2s后出现提示框;删除延时器即删除指定id的延时器。



<style>
    * {
        margin: 0;
        padding: 0;
    }
    p {
        margin-left: 30px;
    }
</style>
<body>
    <button>添加延时器</button>
    <button>删除延时器</button>
    <script>
        var m_p = document.getElementById("m_p");
        var timeoutID;//使用一个全局变量来保存ID
        var m_add_button = document.getElementsByTagName("button")[0];
        var m_del_button = document.getElementsByTagName("button")[1];
        //添加延时器按钮绑定单击事件
        m_add_button.onclick = function () {
            //clearTimeout(timeoutID);//同样也需要删除之前的延时器
            timeoutID = setTimeout(function () {
                alert("2s后延时器触发了!")
            }, 2000);
        };
        //删除定时器按钮绑定单击事件
        m_del_button.onclick = function () {
            clearTimeout(timeoutID);
        }
    </script>
</body>


三、认识异步


介绍异步


异步(asynchronous):不会阻塞CPU继续执行其他语句,当异步完成时,会执行"回调函数"。


重点:对于异步函数不会影响程序的正常执行。例如设置2s的定时器,并不会等待2秒后才执行下一条语句,而是正常往下进行执行!

其实定时器以及延时器的setXXX()方法就是异步函数,其中传入的函数就是回调函数:




示例


需求:在点击按钮时,先设置延时器,其后面输出一条语句,看是否是先等待延时器等待2秒后执行回调函数以后再执行的console输出语句!


效果:对于异步函数,调用执行函数并不会妨碍其他程序的正常执行!



<body>
    <button>添加延时器</button>
    <script>
        var timeoutID;//使用一个全局变量来保存ID
        var m_add_button = document.getElementsByTagName("button")[0];
        //添加延时器按钮绑定单击事件
        m_add_button.onclick = function () {
            timeoutID = setTimeout(function () {
                alert("2s后延时器触发了!")
            }, 2000);
            console.log("changlu❤林儿");
        };
    </script>
</body>




相关文章
|
7天前
|
JavaScript 前端开发
JavaScript 与 DOM 交互
【9月更文挑战第01天】
9 2
|
13天前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
33 1
|
17天前
|
JSON JavaScript 前端开发
JS的无限可能: 前端 精妙DOM技巧至Node.js的服务端
JS的无限可能: 前端 精妙DOM技巧至Node.js的服务端
|
16天前
|
XML JavaScript 前端开发
哇塞!Web 前端惊现 DOM 元素神操作,一场惊心动魄的网页变革,你准备好了吗?
【8月更文挑战第23天】在Web前端开发中,熟练操作DOM元素至关重要。DOM作为一种编程接口,将HTML/XML文档表示为节点树,便于使用JavaScript访问及修改文档内容与结构。
40 0
|
17天前
|
XML JavaScript 测试技术
Web自动化测试框架(基础篇)--HTML页面元素和DOM对象
本文为Web自动化测试入门指南,介绍了HTML页面元素和DOM对象的基础知识,以及如何使用Python中的Selenium WebDriver进行元素定位、操作和等待机制,旨在帮助初学者理解Web自动化测试中的关键概念和操作技巧。
33 1
|
16天前
|
JavaScript 前端开发 API
前端开发者的救赎:揭秘JQ对象与DOM元素的神秘转换术
【8月更文挑战第23天】在Web前端开发领域,jQuery(简称JQ)作为一款流行的JavaScript库,极大简化了HTML文档遍历、事件处理、动画及Ajax交互等操作。理解和掌握jQuery对象与DOM元素间的转换至关重要。
25 0
|
24天前
|
JavaScript 前端开发
DOM的概念?获取html元素的方法有哪些?
DOM的概念?获取html元素的方法有哪些?
26 0
|
24天前
|
JavaScript 前端开发
js之DOM 文档对象模型
js之DOM 文档对象模型
|
25天前
|
JavaScript 前端开发 API
如何访问 DOM 中的元素
如何访问 DOM 中的元素
14 0
|
25天前
|
JavaScript
如何在 Angular 中使用 ViewChild 来访问子组件、指令或 DOM 元素
如何在 Angular 中使用 ViewChild 来访问子组件、指令或 DOM 元素
12 0