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

setTimeout、setInterval、requestAnimationFrame的使用以及区别

setTimeoutsetIntervalrequestAnimationFrame 都是 JavaScript 中用于处理异步任务的函数,但它们在用途、执行机制和精度方面存在显著差异。让我们分别解释它们的特点、区别和用法:


1. setTimeout

特点:
  • 一次性执行:在指定的延迟时间后执行一次函数。
  • 延迟单位:以毫秒(ms)为单位。
  • 不精确:实际执行时间可能略晚于指定时间,因为其依赖于浏览器的任务队列。
  • 用途:适用于需要在一段时间后执行某个任务的场景,例如延迟加载、动画等。
用法:
setTimeout(function, delay);
  • function:要执行的函数。
  • delay:延迟时间,单位为毫秒。
示例:
console.log('Start');setTimeout(() => {console.log('Executed after 2 seconds');
}, 2000);console.log('End');

输出:

Start
End
Executed after 2 seconds

2. setInterval

特点:
  • 重复执行:每隔指定的时间间隔重复执行函数。
  • 延迟单位:以毫秒(ms)为单位。
  • 不精确:实际执行时间可能不准确,尤其是在浏览器忙碌时,可能会累积延迟。
  • 用途:适用于需要周期性执行任务的场景,例如定时器、轮询等。
用法:
setInterval(function, delay);
  • function:要执行的函数。
  • delay:时间间隔,单位为毫秒。
示例:
let counter = 0;const intervalId = setInterval(() => {console.log('Counter:', counter++);if (counter >= 5) {clearInterval(intervalId); // 停止定时器}
}, 1000);

输出:

Counter: 0
Counter: 1
Counter: 2
Counter: 3
Counter: 4
Counter: 5

3. requestAnimationFrame

特点:
  • 与浏览器刷新率同步:在浏览器下一次重绘之前执行回调函数,确保动画流畅。
  • 高精度:实际执行时间与浏览器的刷新率(通常是 60fps)同步。
  • 节能:当页面不可见时,requestAnimationFrame 会暂停调用,节省资源。
  • 用途:适用于动画、游戏等需要高帧率的场景。
用法:
requestAnimationFrame(callback);
  • callback:要执行的函数,会在下一次重绘之前调用。
示例:
function animate() {// 动画逻辑console.log('Animating...');requestAnimationFrame(animate); // 递归调用,实现动画循环
}requestAnimationFrame(animate);

输出:

Animating...
Animating...
Animating...
...

区别总结:

特性setTimeoutsetIntervalrequestAnimationFrame
执行次数一次性重复执行重复执行(直到手动停止或页面不可见)
执行时机延迟后执行每隔固定时间执行与浏览器重绘同步执行
精度不精确(可能延迟)不精确(可能累积延迟)高精度(与刷新率同步)
节能性页面不可见时自动停止
适用场景延迟任务、超时处理周期性任务、轮询动画、游戏、高帧率任务

选择建议:

  • 如果需要一次性延迟执行任务,使用 setTimeout
  • 如果需要周期性执行任务,且对精度要求不高,使用 setInterval
  • 如果需要实现流畅的动画或与浏览器刷新率同步的任务,使用 requestAnimationFrame
http://www.xdnf.cn/news/1143055.html

相关文章:

  • 广东省省考备考(第四十九天7.18)——资料分析(知识点回顾与练习)
  • centos7安装MySQL8.4手册
  • 产品需求文档(PRD)格式全解析:从 RP 到 Word 的选择与实践
  • 【服务器与部署 12】数据库生产环境部署实战:MySQL、PostgreSQL、Redis高可用配置全攻略
  • 【世纪龙科技】汽车故障诊断与排除仿真教学软件
  • uni-app 跳转页面传参
  • 图机器学习(13)——图相似性检测
  • 西门子工业软件全球高级副总裁兼大中华区董事总经理梁乃明先生一行到访庭田科技
  • OpenTelemetry学习笔记(四):OpenTelemetry 语义约定,即字段映射(1)
  • Simulink建模-Mux与Demux模块虚拟向量的组装与拆解
  • QML vscode语法高亮和颜色区分。
  • 51c视觉~合集13
  • 用 React-Three-Fiber 实现雪花下落与堆积效果:从零开始的 3D 雪景模拟
  • 【HCI log】Google Pixel 手机抓取hci log
  • 几款开源的安全监控与防御工具分享
  • 零碳园区势在必行!安科瑞EMS3.0助力园区低碳智慧升级
  • RS485转PROFIBUS DP网关写入命令让JRT激光测距传感器开启慢速模式连续测量
  • CityEngine自动化建模
  • HTTP性能优化实战技术文章大纲
  • 设计循环队列oj题(力口622)
  • 铁路基础设施无人机巡检技术及管理平台
  • Glary Utilities(系统优化工具) v6.20.0.24 专业便携版
  • 麒麟操作系统unity适配
  • Spring全面讲解(无比详细)
  • SpringBoot中使用MessageSource的getMessage获取i18n资源文件中的消息
  • [spring6: PointcutAdvisor MethodInterceptor]-简单介绍
  • Spring学习笔记:Spring SPEL表达式语言深入的学习和使用
  • 算法竞赛备赛——【图论】求最短路径——小结
  • [论文阅读] 人工智能 + 软件工程 | 单会话方法论:一种以人类为中心的人工智能辅助软件开发协议
  • nginx-http反向代理与负载均衡