当前位置: 首页 > news >正文

如何在 JavaScript 中设置定时器?

在 JavaScript 中,设置定时器通常使用两个内置的函数:setTimeout()setInterval()。它们允许你在指定的时间延迟后执行某个函数或者以某个间隔反复执行某个函数。下面,我将结合实际项目代码示例讲解如何使用它们。

1. setTimeout() — 延迟执行一次函数

setTimeout() 用来在指定的延迟时间后执行一个函数。它只会执行一次。

语法:
setTimeout(callback, delay, ...args);
  • callback: 要执行的函数。
  • delay: 延迟时间,以毫秒为单位(1000 毫秒 = 1 秒)。
  • args: 可选参数,在执行回调函数时传递给它。
示例 1:简单的 setTimeout 示例

假设你有一个按钮,点击按钮后会延迟 2 秒显示一条消息。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>setTimeout Example</title>
</head>
<body><button id="clickButton">点击我</button><p id="message" style="display: none;">这是延迟消息</p><script>const button = document.getElementById('clickButton');const message = document.getElementById('message');button.addEventListener('click', function() {// 延迟 2 秒后显示消息setTimeout(function() {message.style.display = 'block';}, 2000); // 2000 毫秒 = 2 秒});</script>
</body>
</html>

工作原理:

  • 用户点击按钮时,触发 click 事件。
  • setTimeout() 延迟 2 秒后执行一个匿名函数,显示消息。

2. setInterval() — 定时重复执行函数

setInterval() 用来以指定的时间间隔反复执行某个函数。

语法:
setInterval(callback, interval, ...args);
  • callback: 要执行的函数。
  • interval: 时间间隔,以毫秒为单位。
  • args: 可选参数,传递给回调函数。
示例 2:简单的 setInterval 示例

假设你正在开发一个倒计时器,定时更新页面上的时间。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>setInterval Example</title>
</head>
<body><div id="timer">10</div><script>let countdown = 10;const timerElement = document.getElementById('timer');const intervalId = setInterval(function() {countdown -= 1;timerElement.textContent = countdown;// 当倒计时结束时清除定时器if (countdown <= 0) {clearInterval(intervalId);alert('时间到!');}}, 1000); // 每秒钟更新一次</script>
</body>
</html>

工作原理:

  • setInterval() 每隔 1 秒(1000 毫秒)执行一次回调函数。
  • 回调函数会更新页面上的倒计时,并在倒计时结束时使用 clearInterval() 清除定时器,防止定时器继续执行。

3. 在实际项目中的应用示例

示例 3:处理用户输入的防抖(Debounce)和节流(Throttle)

定时器在前端开发中非常重要,尤其是在处理用户输入时。两种常见的技术是防抖和节流。

  • 防抖(Debounce):在用户停止输入一段时间后才执行操作。
  • 节流(Throttle):限制函数在单位时间内只能执行一次。
防抖示例

假设你正在开发一个搜索框,希望用户输入时在停止输入 500 毫秒后才发起请求。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Debounce Example</title>
</head>
<body><input type="text" id="searchInput" placeholder="请输入搜索内容"><script>let timeoutId;const searchInput = document.getElementById('searchInput');searchInput.addEventListener('input', function(event) {// 每次输入时清除之前的定时器,重新设置新的定时器clearTimeout(timeoutId);timeoutId = setTimeout(function() {console.log('执行搜索操作:', event.target.value);}, 500); // 500 毫秒后执行搜索});</script>
</body>
</html>

工作原理:

  • 每次用户输入时,都会清除上一次的定时器(clearTimeout(timeoutId)),然后重新启动一个新的定时器。
  • 如果用户在 500 毫秒内停止输入,才会触发搜索操作。
节流示例

假设你在开发一个页面滚动事件处理器,但你希望限制滚动事件的处理频率,以避免频繁的回调造成性能问题。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Throttle Example</title>
</head>
<body><div style="height: 2000px;">滚动页面查看效果</div><script>let lastTime = 0;function handleScroll() {const now = new Date().getTime();// 每 200 毫秒触发一次滚动事件if (now - lastTime >= 200) {lastTime = now;console.log('页面滚动了!');}}window.addEventListener('scroll', handleScroll);</script>
</body>
</html>

工作原理:

  • 每次滚动事件触发时,handleScroll 函数会检查是否距离上次触发已经超过 200 毫秒。
  • 如果满足条件,则执行回调,并更新上次执行的时间。这样可以确保滚动事件不会过于频繁地触发。

4. 清除定时器

使用 clearTimeout()clearInterval() 可以清除已经设置的定时器。

  • clearTimeout() 用来清除由 setTimeout() 设置的定时器。
  • clearInterval() 用来清除由 setInterval() 设置的定时器。
示例 4:清除定时器
const timeoutId = setTimeout(function() {console.log('这个不会执行');
}, 1000);clearTimeout(timeoutId); // 取消定时器

总结

  • setTimeout() 用于延迟执行一次性操作。
  • setInterval() 用于定时执行重复的操作。
  • 在实际项目中,定时器可以帮助我们实现防抖、节流等优化技术,提升应用性能。
  • 清除定时器非常重要,尤其是在动态页面中,避免内存泄漏或不必要的操作。

通过这些定时器的使用,我们可以优化用户体验、提高应用的性能,尤其是在处理复杂交互和高频操作时。

相关文章:

如何在 JavaScript 中设置定时器?

在 JavaScript 中&#xff0c;设置定时器通常使用两个内置的函数&#xff1a;setTimeout() 和 setInterval()。它们允许你在指定的时间延迟后执行某个函数或者以某个间隔反复执行某个函数。下面&#xff0c;我将结合实际项目代码示例讲解如何使用它们。 1. setTimeout() — 延…...

【学习路线】Java

Java基础 基础 基础语法 面向对象 集合框架 JCF 进阶 并发编程 JVM 企业级开发 框架 Spring Boot Spring Cloud 分布式 高性能 高可用 安全 基建 Docker 实战 数据库 MySQL Redis 计算机基础 计算机组成原理 操作系统 计算机网络 数据结构与算法 设计模式 参考&#xff1a;…...

[GYCTF2020]Easyphp

[GYCTF2020]Easyphp 知识点 反序列化 、字符逃逸 解题 审代码 <?php error_reporting(0); session_start(); function safe($parm){$array array(union,regexp,load,into,flag,file,insert,"",\\,"*","alter");return str_replace($arr…...

JavaScript 数组的高级用法与最佳实践

在前端开发中&#xff0c;JavaScript 数组是不可或缺的工具。它们不仅用于存储数据&#xff0c;还提供了丰富的方法来操作和处理这些数据。掌握 JavaScript 数组的高级用法和最佳实践对于编写高效、可维护的代码至关重要。本文将深入探讨 JavaScript 数组的高级用法&#xff0c…...

通信协议 http、tcp、udp

目录 1. 五层网络协议 2. http 3. tcp、udp 4. tcp 3次握手、4次挥手 5. socket 6. httpclient 遇到的问题 1. Q: 使用 EntityUtils.toString(responseEntity, "UTF-8") 中文乱码 2. Q: org.apache.http.NoHttpResponseException: 221.6.16.203:8890 failed …...

Scala的隐式对象和隐式类

1.隐式对象 object Test1 {case class DatabaseConfig(drive:String,url:String)//隐式对象//格式:就是在对象前面加一个 implicit//作用:给函数当默认值implicit object MySqlConfig extends DatabaseConfig("sqlserver.jdbc","localhost:3306")//定义一…...

【AIGC】2016-ACCV-即时追捕:自然环境下的自动唇音同步

2016-ACCV-Out of time: automated lip sync in the wild 摘要1. 引言1.1 相关作品 2. 表示和架构2.1 音频流2.2 视觉流2.3 损失函数2.4 训练 3. 数据集3.1 编制训练数据 4. 实验4.1 确定口型同步误差4.2 应用&#xff1a;主动说话人检测4.3 应用&#xff1a;唇读 5. 结论参考文…...

启智畅想集装箱箱号识别算法,2台相机即可实现较高识别率

启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可。启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可实现对集装箱箱号的精准捕捉与识别。这两台相机分别安装在货车通道的后侧和随意侧面&a…...

让IIS支持PUT请求解决IIS里不支持PUT请求的问题405 Method Not Allowed

文章目录 一、问题描述二、解决方案1.删除WebDav模块2.修改Web.config&#xff08;可选&#xff09; 一、问题描述 好不容易系统开发好了&#xff0c;兴高采烈地上线&#xff0c;部署好了网站&#xff0c;访问正常&#xff0c;打开方式正确&#xff01; 但当我修改某些数据时&…...

入门级捡垃圾工作站记录

入门级捡垃圾工作站记录 想法 一直想着拥有有一台自己的多功能机子&#xff0c;一个笔记本很难事事包办&#xff0c;本来打算配一个台式机&#xff0c;后来研究了一下&#xff0c;索性捡垃圾拼装的工作站&#xff0c;性价比更高&#xff0c;稳定性也更强&#xff0c;而且还可…...

2024.12.9——攻防世界ics-06

知识点&#xff1a;index文件 ics 文件&#xff08;iCalendar 格式文件&#xff09; bp抓包 密码爆破 题目&#xff1a;云平台报表中心收集了设备管理基础服务的数据&#xff0c;但是数据被删除了&#xff0c;只有一处留下了入侵者的痕迹。 一、解题思路 step 1 打开靶机审题…...

微信小程序介绍-以及写项目流程(重要)

前言&#xff1a;本篇文章介绍微信小程序以及项目介绍&#xff1a; 文章介绍&#xff1a;介绍了微信小程序常用的指令、组件、api。tips&#xff1a;最好按照官方文档来进行学习&#xff0c;大致可以我的目录来学习&#xff0c;对于写项目是没有问题的 微信小程序官方文档https…...

国内国际标准!羊毛衫检测项目、检测要求及标准

本文整理了羊毛衫检测项目、检测要求及标准有关内容 一、羊毛衫检测项目 羊毛衫的检测项目主要包括以下几个方面&#xff1a; 纤维含量检测&#xff1a;检测羊毛衫中羊毛及其他纤维的比例&#xff0c;确保纤维质量符合产品标识或相关标准要求。 甲醛含量检测&#xff1a;测…...

MySQL知识大总结(进阶)

一&#xff0c;数据库的约束 1&#xff0c;约束类型 1not null非空约束&#xff0c;标记这个字段不可以为空2unique唯一约束&#xff0c;标记这个字段的值是该列唯一的值&#xff0c;在这一列的其他行&#xff0c;不可以与该字段相等3default 默认约束&#xff0c;在该字段没…...

【C语言】库函数常见的陷阱与缺陷(2):字符串转化函数

目录 一、atoi 函数 1.1. 功能与用法 1.2. 陷阱与缺陷 1.2.1. 输入验证不足 1.2.2. 溢出问题 1.3 安全替代 1.4. 代码示例 二、atof 函数 2.1. 功能与用法 2.2. 陷阱与缺陷 2.3. 安全使用建议 2.4. 代码示例 三、strtol 函数 3.1. 功能与用法 3.2. 陷阱与缺陷 …...

渗透测试基础

渗透测试基础是指对计算机系统、网络或应用程序进行模拟攻击&#xff0c;以发现其安全漏洞和潜在威胁的一种安全评估技术。通过模拟真实的攻击场景&#xff0c;渗透测试帮助组织了解其系统的安全弱点、验证防护措施的有效性&#xff0c;并提供改进建议。 渗透测试的核心概念 1…...

传奇996_53——后端ui窗口局部刷新

描述&#xff1a;一个大窗口&#xff0c;点击某个键&#xff0c;弹出小窗口。 小窗口中将msg存进变量中 大窗口中判断一个参数是否为null&#xff0c;如果不为null&#xff0c;说明界面不是第一次打开&#xff0c;而是被刷新了。就加上小窗口的那个变量 有时小窗口中还有其他…...

C++ constexpr vs const

笼统的讲 constexpr 主要用于编译时期&#xff0c;const用于运行时&#xff0c;但实际上两者都可以同时用于编译时期和运行时。 const const可以修饰全局变量&#xff0c;局部变量&#xff0c;函数参数&#xff0c;指针&#xff0c;引用&#xff0c;也可以修饰类成员函数&…...

【达梦数据库】存储过程调用实践案例-select

目录 前言创建表插入数据查询表中数据创建存储过程打开dbms_output包输出开关调用存储过程 前言 如果要在存储过程中执行一个SELECT语句并处理其结果&#xff0c;你不能直接使用EXECUTE IMMEDIATE&#xff0c;因为EXECUTE IMMEDIATE主要用于执行那些不返回行的语句&#xff08;…...

041_Compare_Matrix_Squre_Sum_in_MATLAB中矩阵平方和的比较

矩阵平方和的计算 矩阵平方和的定义 矩阵平方和的定义是对矩阵中的每一个元素进行平方&#xff0c;然后求和。 对于一个矩阵 A A A&#xff0c;其平方和定义为&#xff1a; sum ∑ i 1 m ∑ j 1 n A ( i , j ) 2 \text{sum} \sum_{i1}^{m}\sum_{j1}^{n} A(i,j)^2 sumi1∑…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...