如何在 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 中,设置定时器通常使用两个内置的函数:setTimeout() 和 setInterval()。它们允许你在指定的时间延迟后执行某个函数或者以某个间隔反复执行某个函数。下面,我将结合实际项目代码示例讲解如何使用它们。 1. setTimeout() — 延…...
【学习路线】Java
Java基础 基础 基础语法 面向对象 集合框架 JCF 进阶 并发编程 JVM 企业级开发 框架 Spring Boot Spring Cloud 分布式 高性能 高可用 安全 基建 Docker 实战 数据库 MySQL Redis 计算机基础 计算机组成原理 操作系统 计算机网络 数据结构与算法 设计模式 参考:…...
[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 数组的高级用法与最佳实践
在前端开发中,JavaScript 数组是不可或缺的工具。它们不仅用于存储数据,还提供了丰富的方法来操作和处理这些数据。掌握 JavaScript 数组的高级用法和最佳实践对于编写高效、可维护的代码至关重要。本文将深入探讨 JavaScript 数组的高级用法,…...
通信协议 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 应用:主动说话人检测4.3 应用:唇读 5. 结论参考文…...
启智畅想集装箱箱号识别算法,2台相机即可实现较高识别率
启智畅想集装箱箱号识别算法,在货车通道中使用时,一般配备2台相机即可。启智畅想集装箱箱号识别算法,在货车通道中使用时,一般配备2台相机即可实现对集装箱箱号的精准捕捉与识别。这两台相机分别安装在货车通道的后侧和随意侧面&a…...
让IIS支持PUT请求解决IIS里不支持PUT请求的问题405 Method Not Allowed
文章目录 一、问题描述二、解决方案1.删除WebDav模块2.修改Web.config(可选) 一、问题描述 好不容易系统开发好了,兴高采烈地上线,部署好了网站,访问正常,打开方式正确! 但当我修改某些数据时&…...
入门级捡垃圾工作站记录
入门级捡垃圾工作站记录 想法 一直想着拥有有一台自己的多功能机子,一个笔记本很难事事包办,本来打算配一个台式机,后来研究了一下,索性捡垃圾拼装的工作站,性价比更高,稳定性也更强,而且还可…...
2024.12.9——攻防世界ics-06
知识点:index文件 ics 文件(iCalendar 格式文件) bp抓包 密码爆破 题目:云平台报表中心收集了设备管理基础服务的数据,但是数据被删除了,只有一处留下了入侵者的痕迹。 一、解题思路 step 1 打开靶机审题…...
微信小程序介绍-以及写项目流程(重要)
前言:本篇文章介绍微信小程序以及项目介绍: 文章介绍:介绍了微信小程序常用的指令、组件、api。tips:最好按照官方文档来进行学习,大致可以我的目录来学习,对于写项目是没有问题的 微信小程序官方文档https…...
国内国际标准!羊毛衫检测项目、检测要求及标准
本文整理了羊毛衫检测项目、检测要求及标准有关内容 一、羊毛衫检测项目 羊毛衫的检测项目主要包括以下几个方面: 纤维含量检测:检测羊毛衫中羊毛及其他纤维的比例,确保纤维质量符合产品标识或相关标准要求。 甲醛含量检测:测…...
MySQL知识大总结(进阶)
一,数据库的约束 1,约束类型 1not null非空约束,标记这个字段不可以为空2unique唯一约束,标记这个字段的值是该列唯一的值,在这一列的其他行,不可以与该字段相等3default 默认约束,在该字段没…...
【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. 陷阱与缺陷 …...
渗透测试基础
渗透测试基础是指对计算机系统、网络或应用程序进行模拟攻击,以发现其安全漏洞和潜在威胁的一种安全评估技术。通过模拟真实的攻击场景,渗透测试帮助组织了解其系统的安全弱点、验证防护措施的有效性,并提供改进建议。 渗透测试的核心概念 1…...
传奇996_53——后端ui窗口局部刷新
描述:一个大窗口,点击某个键,弹出小窗口。 小窗口中将msg存进变量中 大窗口中判断一个参数是否为null,如果不为null,说明界面不是第一次打开,而是被刷新了。就加上小窗口的那个变量 有时小窗口中还有其他…...
C++ constexpr vs const
笼统的讲 constexpr 主要用于编译时期,const用于运行时,但实际上两者都可以同时用于编译时期和运行时。 const const可以修饰全局变量,局部变量,函数参数,指针,引用,也可以修饰类成员函数&…...
【达梦数据库】存储过程调用实践案例-select
目录 前言创建表插入数据查询表中数据创建存储过程打开dbms_output包输出开关调用存储过程 前言 如果要在存储过程中执行一个SELECT语句并处理其结果,你不能直接使用EXECUTE IMMEDIATE,因为EXECUTE IMMEDIATE主要用于执行那些不返回行的语句(…...
041_Compare_Matrix_Squre_Sum_in_MATLAB中矩阵平方和的比较
矩阵平方和的计算 矩阵平方和的定义 矩阵平方和的定义是对矩阵中的每一个元素进行平方,然后求和。 对于一个矩阵 A A A,其平方和定义为: sum ∑ i 1 m ∑ j 1 n A ( i , j ) 2 \text{sum} \sum_{i1}^{m}\sum_{j1}^{n} A(i,j)^2 sumi1∑…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
