尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
副队长JavaScript教程(62)-BOM之定时器
点此查看所有教程、项目、源码导航文章目录1. 背景2. 延时定时器 setTimeout2.1 基础语法2.2 取消延时定时器 clearTimeout3. 循环定时器 setInterval3.1 基础语法3.2 取消循环定时器 clearInterval4. 两个定时器的对比5. 入门阶段重要注意点5.1 时间只是**预期时间**不是绝对精准5.2 定时器里面的函数不会立刻执行5.3 不要忘记保存定时器 id否则无法取消5.4 不要随便开启大量循环定时器6. 实战案例页面倒计时7. 小结1. 背景前面我们学习了 location、history、navigator这些都是用来读取、控制浏览器信息的对象。这一节我们学习 BOM 里非常常用的定时器定时器也是 window 自带的方法属于 BOM 的能力。定时器的作用让代码不要立刻执行等待一段时间之后再执行或者每隔一段时间自动重复执行。我们平时网页里的倒计时、轮播图自动切换、定时刷新底层都是定时器。补充定时器不是 JS 语言本身ES的语法是浏览器提供的 APINode.js 里面也有类似定时器但是属于平台提供的能力。2. 延时定时器 setTimeoutsetTimeout 是延时定时器等待指定时间代码只执行一次。单位毫秒1 秒 1000 毫秒2.1 基础语法setTimeout 的第一个参数要求传入一个函数这个函数里面放我们想要延时执行的代码。我们可以先单独定义一个函数再把函数名传给 setTimeout这种写法更好理解// 1. 先单独定义好函数functionsayHello(){console.log(3秒之后打印这句话);}// 2. 把函数名传给setTimeout第二个参数是等待的毫秒数vartimerIdsetTimeout(sayHello,3000);注意这里写sayHello不要写成sayHello()。加括号代表立刻调用函数只写函数名是把函数交给定时器等时间到浏览器再去执行。上面这种写法是先把函数单独抽出来逻辑清晰。如果这个函数只需要在这里使用一次我们也可以不单独起名直接在参数位置写匿名函数效果完全一样vartimerIdsetTimeout(function(){console.log(3秒之后打印这句话);},3000);执行流程代码走到这里不会卡住等待继续往下执行其他代码等到时间到了才会执行里面的函数。重点定时器不会阻塞后面代码运行这和 alert、confirm 弹窗不一样。弹窗是阻塞代码定时器是异步安排任务。2.2 取消延时定时器 clearTimeoutsetTimeout 会返回一个数字编号我们一般叫定时器 id把 id 保存到变量里就可以用 clearTimeout 取消它。如果在时间到之前取消里面的函数就不会执行了。functionsayHello(){console.log(这句话不会打印);}vartimerIdsetTimeout(sayHello,3000);// 取消定时器clearTimeout(timerId);3. 循环定时器 setIntervalsetInterval 是循环定时器每隔固定时间重复执行函数不会自动停止。3.1 基础语法同样我们优先看有名函数的写法方便理解functionprintLog(){console.log(每隔1秒打印一次);}vartimerIdsetInterval(printLog,1000);熟悉之后也可以直接写匿名函数vartimerIdsetInterval(function(){console.log(每隔1秒打印一次);},1000);只要页面不关闭、不手动取消它会一直循环执行。3.2 取消循环定时器 clearInterval循环定时器如果不关闭会一直跑非常容易造成性能问题所以需要的时候一定要手动停止。varcount0;functionaddCount(){countcount1;console.log(count);if(count5){// 满足条件停止循环clearInterval(timerId);}}vartimerIdsetInterval(addCount,1000);4. 两个定时器的对比setTimeout等一段时间执行一次用 clearTimeout 取消setInterval每隔一段时间重复执行用 clearInterval 取消它们都是 window 的方法完整写法 window.setTimeout、window.setIntervalwindow 可以省略第二个参数都是毫秒1000 1 秒5. 入门阶段重要注意点5.1 时间只是预期时间不是绝对精准浏览器很忙的时候定时器里面的代码可能会稍微晚一点执行入门阶段我们先不用深究知道它不会绝对精准即可。5.2 定时器里面的函数不会立刻执行JS 代码是从上往下跑定时器只是 “登记一个任务”登记完直接继续向后执行不会原地等待。举个例子console.log(第一行);functiontest(){console.log(延时2秒);}setTimeout(test,2000);console.log(最后一行);打印顺序第一行 → 最后一行 → 延时 2 秒。5.3 不要忘记保存定时器 id否则无法取消想要停止定时器必须拿到它返回的 id如果不保存 id后面就没办法停止这个定时器。5.4 不要随便开启大量循环定时器定时器开多了会不停重复执行代码占用浏览器资源页面会变卡。用完及时关闭是好习惯。6. 实战案例页面倒计时需求页面上展示倒计时从 10 开始倒数每秒数字减 1到 0 的时候停止倒计时并提示时间到。思路使用 setInterval 循环定时器每隔 1 秒修改页面数字数字到 0 时清除定时器。!DOCTYPEhtmlhtmllangzh-CNheadmetacharsetUTF-8title倒计时案例/title/headbodyh1倒计时spanidnum10/span/h1script// 获取页面元素varspandocument.getElementById(num);vartime10;functioncountDown(){timetime-1;span.innerTexttime;// 判断倒计时到0if(time0){clearInterval(timerId);alert(时间到);}}// 开启循环定时器vartimerIdsetInterval(countDown,1000);/script/body/html效果案例讲解先拿到页面上用来显示数字的 span 元素定义初始倒计时时间 time 10单独定义倒计时函数 countDown交给循环定时器每 1 秒执行一次 countDown每次执行时间减 1把新的数字更新到页面当 time 小于等于 0调用 clearInterval 关闭定时器同时弹出提示。7. 小结setTimeout延时定时器等待一段时间执行一次clearTimeout 取消。setInterval循环定时器每隔一段时间重复执行clearInterval 取消。定时器第一个参数是函数可以先单独定义有名函数再传入也可以直接写匿名函数。时间单位是毫秒1s 1000ms。定时器不会阻塞后面代码属于浏览器安排的异步任务。定时器 id 是编号保存 id才可以取消定时器。循环定时器一定要记得在合适时机清除避免一直运行消耗性能。
RELATED

相关推荐

副队长JavaScript教程(61)-BOM之location、history、navigator常见用法

副队长JavaScript教程(61)-BOM之location、history、navigator常见用法

点此查看 所有教程、项目、源码导航 文章目录1. 背景2. location 对象2.1 读取地址信息2.2 页面跳转2.3 刷新页面3. history 对象3.1 后退3.2 前进3.3 跳转到指定历史记录4. navigator 对象4.1 navigator.userAgent(最核心)4.2 navigator.platform 获取操…

📅 2026/10/30 18:14:48
数据图表也有设计门槛:6款主流产品谁能做出更专业的商业图表?

数据图表也有设计门槛:6款主流产品谁能做出更专业的商业图表?

摘要:很多人以为数据图表就是拖个字段、选个图形,但真正专业的商业图表,差距藏在图表类型的丰富度、默认样式的审美、交互的细腻程度,以及能否让业务人员自己做出合格图表。这篇横评 6 款主流 BI 产品,从图表设计能力的…

📅 2026/10/30 18:14:48
AWESOME-OCR-LLM完整指南:一文读懂大模型时代OCR的900+篇论文全景

AWESOME-OCR-LLM完整指南:一文读懂大模型时代OCR的900+篇论文全景

【免费下载链接】AWESOME-OCR-LLM OCR in the Era of Large Language Models 项目地址: https://gitcode.com/gh_mirrors/aw/AWESOME-OCR-LLM 点击查看 免费下载 如果你正在关注**大模型时代OCR(OCR in the LLM Era)**的研究进展&#xff0c…

📅 2026/10/30 18:14:48
MORE NEWS

更多资讯

📰

微软Autopilot与腾讯WorkBuddy对比:设备管理 vs 办公效率智能体

1. 先搞清楚这两个东西到底是不是一个赛道1.1 名字像,骨子里完全不是一回事很多人第一次听到“微软Autopilot”和“腾讯WorkBuddy”,下意识会觉得这俩都是“办公自动化工具”,顶多是微软和腾讯各出一款,选哪个看预算和生态。这个判…

📰

矩量法线性基函数:选型、RWG构造与复合界面拼接

在电磁仿真这条路上走得久了,你会发现一个很有意思的现象:同一套积分方程、同一份网格、同一个求解器,换一组基函数,结果能从"和实测对得上"变成"差出十几dB"。金属介质复合结构的矩量法尤其如此——金属表面…

📰

把技能当资产管理:从盘点、组合到项目内化的实战复盘

我是一个特别信奉“把能力当资产来管理”的人,所以几年前给自己搭了个叫skills的个人项目。说起来挺不好意思,第一版skills就是一张Excel表,左边是技能名字,右边清一色写着“熟练”。直到有一次被现实狠狠教育——面试官让我现场处…

📰

Codex Responses API 报错解决方法:Chat/Completions 不支持时如何改到 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

OpenGL旋转六面体纹理贴图实战:从GLFW到MVP矩阵完全指南

简介:一份基于VS2019开发的OpenGL三维图形渲染练习工程,围绕旋转六面体与纹理贴图展开,适合计算机图形学初学者、OpenGL入门者及需要完成课程设计的高校学生。工程以C源码调用OpenGL接口,完整演示六面体模型构建、glRotatef矩阵旋…

📰

【IEEE出版 | 高届数会议 | 马来西亚理工大学主办 | 广州线下主会场 + 线上参会可选】第八届国际科技创新学术交流大会暨第七届信息科学与教育国际学术会议(ICISE-IE 2026)

第八届国际科技创新学术交流大会暨第七届信息科学与教育国际学术会议(ICISE-IE 2026) 2026 8th International Academic Exchange Conference on Science and Technology Innovation&2026 7th International Conference on Information Science an…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬