requestAnimationFrame()
window.requestAnimationFrame()
这个方法是用来在页面重绘之前,通知浏览器调用一个指定的函数,以满足开发者操作动画的需求。这个方法接受一个函数为参,该函数会在重绘前调用。
注意: 如果想得到连贯的逐帧动画,函数中必须重新调用 requestAnimationFrame()。
如果你想做逐帧动画的时候,你应该用这个方法。这就要求你的动画函数执行会先于浏览器重绘动作。通常来说,重绘的频率是每秒60次,但是一般会遵循W3C标准规定的频率。如果是后台标签页面,重绘频率则会大大降低。
参数:
回调函数只会被传入一个DOMHighResTimeStamp
参数,这个参数指示当前时间距离开始触发 requestAnimationFrame 的回调的时间。因为很多个函数在这一帧被执行,所以每个函数都将被传入一个相同的时间戳,尽管经过了之前很多的计算工作。这个数值是一个小数,单位毫秒,精确度在 10 µs。
返回值:
requestID
是一个长整型非零值,作为一个唯一的标识符.你可以将该值作为参数传给 window.cancelAnimationFrame()
来取消这个回调函数。
兼容性:
兼容性代码封装:
1 (function() { 2 var lastTime = 0; 3 var vendors = ['webkit', 'moz']; 4 for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { 5 window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; 6 window.cancelAnimationFrame = 7 window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame']; 8 } 9 10 if (!window.requestAnimationFrame) 11 window.requestAnimationFrame = function(callback, element) { 12 var currTime = new Date().getTime(); 13 var timeToCall = Math.max(0, 16 - (currTime - lastTime)); 14 var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 15 timeToCall); 16 lastTime = currTime + timeToCall; 17 return id; 18 }; 19 20 if (!window.cancelAnimationFrame) 21 window.cancelAnimationFrame = function(id) { 22 clearTimeout(id); 23 }; 24 }());
DEMO:
http://codepen.io/baiyaaaaa/pen/raYJVN
转载于:https://www.cnblogs.com/WhiteCusp/p/4279846.html
requestAnimationFrame()相关推荐
- requestAnimationFrame,Web中写动画的另一种选择
HTML5/CSS3时代,我们要在web里做动画选择其实已经很多了: 你可以用CSS3的animattion+keyframes; 你也可以用css3的transition; 你还可以用通过在canv ...
- javascript requestAnimationFrame 解决 setTimeout、setInterval 时间不准的方法。
javascript requestAnimationFrame 解决 setTimeout.setInterval 时间不准的方法. 取代 setInterval <!DOCTYPE html ...
- 动画requestAnimationFrame
前言 在研究canvas的2D pixi.js库的时候,其动画的刷新都用requestAnimationFrame替代了setTimeout 或 setInterval 但是jQuery中还是采用了s ...
- 神奇的requestAnimationFrame
引入 计时器一直是JavaScript动画的核心技术.而编写动画循环的关键是要知道延迟时间多长合适.一方面,循环间隔必须足够短,这样才能让不同的动画效果显得平滑流畅:另一方面,循环间隔还要足够长,这样 ...
- window.requestAnimationFrame
今天小猪在看一个html5的demo时一直在找他的动画是怎么实现的,按照我的理解就应该是调用setInterval来循环调用动画函数来实现.但是在Demo中就是找不到这个函数.干着急的小猪只好一步一步 ...
- 你需要知道的requestAnimationFrame
你需要知道的requestAnimationFrame 随着前端的发展,css已经能够实现非常多的动画特效,但是仍然存在css无法完成的动画任务(比如页面滚动),通常的解决方案都是使用js中的setI ...
- 遇见requestAnimationFrame
今天,在读javascript异步编程的js事件深入理解部分的时候,了解到了requestAnimationFrame 这个api,在这里记录一下. 原文: setTimeout 和 setInter ...
- 网页性能管理详解:浅谈chrome-Timeline及window.requestAnimationFrame()方法
你遇到过性能很差的网页吗? 这种网页响应非常缓慢,占用大量的CPU和内存,浏览起来常常有卡顿,页面的动画效果也不流畅. 你会有什么反应?我猜想,大多数用户会关闭这个页面,改为访问其他网站.作为一个开发 ...
- js中计时器setTimeout、setInterval、requestAnimationFrame区别
转载自:https://www.cnblogs.com/xiaohuochai/p/5777186.html 本文仅用于作为学习笔记 计时器一直是javascript动画的核心技术.而编写动画循环的关 ...
- webvr动画函数requestAnimationFrame
在学习three.js绘制动画的时候接触到了动画函数requestAnimationFrame. 在HTML5/css3的时代我们要在web上写动画选择其实已经很多种了: 1.css3的animatt ...
最新文章
- 查看docker镜像的dockerfile脚本json信息
- 详解在visual studio中使用git版本系统(图文)
- Ubuntu 用户安装 MATE
- Linux 命令之 gunzip -- 用来解压缩文件
- python中自定义模块导入飘红_hadoop streaming 中跑python程序,自定义模块的导入
- Spring4.x(3)---工厂模式设计IOC容器
- 已有Unity工程升级到LWRP/HDRP后材质都变洋红色了,怎么办?
- 1.2、安装Django-1.5.1及所需要的Python2.74环境
- sql server2008如果表中已经有很多条记录,再添加一个非空字段
- js文件上传不用点击上传按钮自动上传
- java sort类_JAVA Collections工具类sort()排序方法
- Linux运维基础入门(二):网络基础知识梳理02
- 几行python代码实现Windows软件卸载
- 极域电子教室V4窗口化
- Excel 对比两个表的相同列内容是否一致
- stokes方程matlab,【Fluent】雷诺方程:推导与求解(附MATLAB代码)
- 安装和使用openBMC官网维护的qemu
- MyBatis14 缓存
- 【实例】VBA excel 隔行插入行与列
- 知乎万赞:什么样的程序员在35岁以后依然被公司抢着要?打破程序员“中年危机”