位置: 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版本创建项目)

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

  • 采购价格含税吗
  • 土地增值税的扣除项目包括哪几项
  • 工程监理费开什么发票
  • 主营业务利润和利润总额
  • 减免的养老保险怎么走账
  • 房地产房屋质量检测
  • 城建税 申报表
  • 自主研发全流程
  • 存货转固定资产的时点
  • 社保基金会割肉操作吗
  • 企业所得税的征税对象包括
  • 物业电费加价如何举报
  • 建筑公司挂靠项目账务怎么做?
  • 生产企业出口退税流程及账务处理
  • 股权转让的印花税是按照什么金额缴纳
  • 企业购房房产税土地税补缴
  • 奖金能否和工资一起发放
  • 汇算清缴退税计入什么科目
  • 研发支出的二级科目是什么
  • 非全日制劳动用工扣税
  • 咨询费的税费
  • 营改增后装饰公司税率
  • 多结转成本的会计分录
  • 公司处理陈旧物怎么处理
  • 哪些费用发票可以报销
  • 建筑行业预交增值税什么时候预交
  • win10玩游戏fps低怎么办
  • 预提收入的会计处理方法
  • 公司付物业费没开发票
  • php微信公众号消息推送
  • 城建税退回与不退税区别
  • 企业资产损失税前扣除管理办法最新
  • 结转增值税的账务处理
  • 金税盘减免怎么做分录
  • 企业所得税应纳税额的计算公式
  • 分公司以总公司名义
  • dedecms主页修改
  • mysql临时表什么时候销毁
  • 房产税和城镇土地使用税需要计提吗
  • 外部审计查什么
  • 汽车车票增值税税率
  • 季度利润表是累计数吗
  • c#调用excel
  • 税控服务费全额抵扣申报怎么填
  • 非金融企业之间的借款合同要交印花税吗
  • 哪些发票可以报销哪些不可以
  • 汽车4s店收到保险佣金做账
  • 咨询费如何缴税
  • 计提应付款是什么意思
  • 收到水电费发票要交印花税吗
  • 收款单属于什么科目
  • 非流动资产基金借贷方表示
  • 支付贷款利息的现金流量怎么指定?
  • sql server储存过程的创建与使用
  • mac苹果电脑如何开4个微信号
  • win7开始菜单在哪个文件夹
  • Mac怎么更改锁屏密码
  • raid主要使用三种技术
  • macbookpro屏幕显示
  • linux如何使用uname命令
  • windows7准备配置windows
  • win7连接投屏器
  • xp升级win8.1
  • Win10更新后浏览器不能联网怎么办
  • nodejs 模块
  • 在github开源的项目有假的吗
  • linux命令行命令
  • Node.js中的construct
  • Node.js中的事件循环是什么意思
  • flask完整项目实例
  • c# for unity
  • Android - DrawerLayout的使用
  • 法线贴图应该贴在哪里
  • jquery鼠标位置
  • jQuery UI Bootstrap是什么?
  • 纳税申报表如何打印
  • 网上申报成功后才能去体检吗
  • 安置房公摊面积多少属于正常范围
  • 酒店不给住怎么办
  • 河南三门峡税务社保缴费电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设