位置: IT常识 - 正文

【JavaScript 刨根问底之】requestAnimationFrame以及延时器

编辑:rootadmin
【JavaScript 刨根问底之】requestAnimationFrame以及延时器 requestAnimationFrame

推荐整理分享【JavaScript 刨根问底之】requestAnimationFrame以及延时器,希望有所帮助,仅作参考,欢迎阅读内容。

【JavaScript 刨根问底之】requestAnimationFrame以及延时器

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

这里会说下requestAnimationFrame的由来,以及为什么会出现它。同时也会横向对比下定时器以及延时器

早期的动画

动画是一个持续的过程。早期的时候动画都是通过定时器来实现的。看如下代码

(function() { function updateAnimations() { doAnimation1(); doAnimation2(); // 其他任务 } setInterval(updateAnimations, 100); })();一般的计算器显示器的屏幕刷新频率是60HZ,这就意味着是每秒要绘制60次。大多数浏览器都会显示绘制频率。为了实现动画效果过渡平滑最佳的重绘间隔大约17/毫秒。以这个速度重绘可以实现最佳的滑动效果。但是即使是这样依然无法保证能平滑过度。因为延时器/定时器的执行的时机不定。虽然可以设置执行时间。即使将延时任务添加到队列中也无法保证能立马执行。这取决于上一个任务或是同步任务执行的时间长度从js层面无法得知浏览器的绘制时机。所以函数requestAnimationFrame就出现了函数requestAnimationFrame1. 执行时机在每次浏览器重绘之前执行2. 使用方法函数requestAnimationFrame只允许传递一个参数。而且参数必须是一个函数参数函数会被加入到队列。在每次浏览器绘制之前将队列中的函数进行执行每添加一次再下次绘制执行后,需要再次添加function updateProgress() { var div = document.getElementById("status"); div.style.width = (parseInt(div.style.width, 10) + 5) + "%"; if (div.style.left != "100%") { requestAnimationFrame(updateProgress); } } requestAnimationFrame(updateProgress);3. 如何取消

在全局中提供了函数cancelAnimationFrame. 可以通过函数进行取消。大致的原理跟延时器/ 定时器保持一致

在函数requestAnimationFrame将函数加入队列后,会返回一个id(可以将id理解为队列的位置)。可以通过执行函数cancelAnimationFrame来进行取消let requestID = window.requestAnimationFrame(() => { console.log('Repaint!'); }); window.cancelAnimationFrame(requestID);通过函数requestAnimationFrame进行节流处理let enabled = true;function expensiveOperation() { console.log('Invoked at', Date.now()); } window.addEventListener('scroll', () => { if (enabled) { enabled = false; window.requestAnimationFrame(expensiveOperation); window.setTimeout(() => enabled = true, 50); } });
本文链接地址:https://www.jiuchutong.com/zhishi/299921.html 转载请保留说明!

上一篇:idea2021版本创建一个javaweb项目(含额外知识--添加tomcat相关jar包)(idea2021版本创建项目)

下一篇:作用域和作用域链(作用域和作用域链的理解)

  • 什么叫直接税?直接税有哪些?
  • 所得税汇算补提所得税会计分录
  • 个体户需要交哪种税
  • 金税盘交钱
  • 公司没有收入怎么报销
  • 水利建设基金计算
  • 企业一般户怎么注销
  • 住宿税率是多少 5%
  • 费用和利润的比例
  • 国税申报需要带什么资料
  • 小规模纳税人税费怎么算
  • 高亮!这些发票不能抵扣增值税
  • 拨付所属资金和上级拨付资金
  • 固定资产折旧从入账时间算还是购入时间算
  • 计提工资当月要结转吗?
  • 增值税普通发票怎么开
  • 短期投资损失
  • 鸿蒙系统如何删除桌面图标
  • windows11我的电脑怎么放到桌面
  • 公司补缴印花税怎么申报
  • 公司开业需要怎么布置
  • win10如何自定义鼠标指针
  • 平安树的养殖方法和浇水时间
  • 图解在OS X中管理窗口大小的多种方法
  • 电脑输入法无法输入中文怎么办
  • 如何在pc桌面上添加文件
  • 发生额怎么算
  • 出口退税一般退什么税
  • 保险税前扣除比例是多少
  • PHP:imagepsfreefont()的用法_GD库图像处理函数
  • 技术转让费会计处理
  • 结转销售原材料会计分录
  • 年末进公司有年终奖吗
  • 企业所得税的应纳税额计算公式
  • array php
  • 支付水电费增值税账务处理
  • 职工参加生育保险
  • php实现文件上传需要使用哪个全局变量
  • vue使用教程
  • javaweb总结笔记
  • transformer模型包含哪些结构
  • torch测定
  • while循环语法结构
  • 税务自查报告范文自查报告怎么写
  • 备用金管理方式
  • php判断是否存在某字符串
  • 财务费用在贷方,怎么结转到本年利润?
  • 出口退税超期了怎么办
  • mysql存储过程cursor
  • 电商企业快递费怎么算
  • 税控盘的服务费可以抵扣吗
  • 项目差旅费能计入项目费用吗
  • 避税的形式
  • 金税四期功能
  • SQL Server性能优化工具Profiler
  • 出口销售确认书的条款
  • 简易计税项目税率
  • 佣金怎样算
  • 银行有哪几种转型方式
  • 小微企业税控盘维护费每年都要交吗
  • sql如何查出重复的数据
  • 怎样升级智慧中小学版本软件
  • tcp半连接和全连接
  • wind微博
  • shell脚本中的数组
  • 阿J的cocos2d-x学习笔记-元素消消看(四)-可发展的空间及游戏开发中的问题
  • 通过node-mysql搭建Windows+Node.js+MySQL环境的教程
  • Android 让EditText失去焦点避免自动弹出输入法
  • vue动态引入模块
  • node.js web
  • python 文件头
  • unity项目流程
  • node.js django
  • jquery unload
  • 网页js识别设备的唯一性
  • jquery fullpage
  • python中fun函数怎么用
  • 税务局组织收入存在的问题
  • 如何给局长送点礼品
  • 国家税务总局制服
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设