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()相关推荐

  1. requestAnimationFrame,Web中写动画的另一种选择

    HTML5/CSS3时代,我们要在web里做动画选择其实已经很多了: 你可以用CSS3的animattion+keyframes; 你也可以用css3的transition; 你还可以用通过在canv ...

  2. javascript requestAnimationFrame 解决 setTimeout、setInterval 时间不准的方法。

    javascript requestAnimationFrame 解决 setTimeout.setInterval 时间不准的方法. 取代 setInterval <!DOCTYPE html ...

  3. 动画requestAnimationFrame

    前言 在研究canvas的2D pixi.js库的时候,其动画的刷新都用requestAnimationFrame替代了setTimeout 或 setInterval 但是jQuery中还是采用了s ...

  4. 神奇的requestAnimationFrame

    引入 计时器一直是JavaScript动画的核心技术.而编写动画循环的关键是要知道延迟时间多长合适.一方面,循环间隔必须足够短,这样才能让不同的动画效果显得平滑流畅:另一方面,循环间隔还要足够长,这样 ...

  5. window.requestAnimationFrame

    今天小猪在看一个html5的demo时一直在找他的动画是怎么实现的,按照我的理解就应该是调用setInterval来循环调用动画函数来实现.但是在Demo中就是找不到这个函数.干着急的小猪只好一步一步 ...

  6. 你需要知道的requestAnimationFrame

    你需要知道的requestAnimationFrame 随着前端的发展,css已经能够实现非常多的动画特效,但是仍然存在css无法完成的动画任务(比如页面滚动),通常的解决方案都是使用js中的setI ...

  7. 遇见requestAnimationFrame

    今天,在读javascript异步编程的js事件深入理解部分的时候,了解到了requestAnimationFrame 这个api,在这里记录一下. 原文: setTimeout 和 setInter ...

  8. 网页性能管理详解:浅谈chrome-Timeline及window.requestAnimationFrame()方法

    你遇到过性能很差的网页吗? 这种网页响应非常缓慢,占用大量的CPU和内存,浏览起来常常有卡顿,页面的动画效果也不流畅. 你会有什么反应?我猜想,大多数用户会关闭这个页面,改为访问其他网站.作为一个开发 ...

  9. js中计时器setTimeout、setInterval、requestAnimationFrame区别

    转载自:https://www.cnblogs.com/xiaohuochai/p/5777186.html 本文仅用于作为学习笔记 计时器一直是javascript动画的核心技术.而编写动画循环的关 ...

  10. webvr动画函数requestAnimationFrame

    在学习three.js绘制动画的时候接触到了动画函数requestAnimationFrame. 在HTML5/css3的时代我们要在web上写动画选择其实已经很多种了: 1.css3的animatt ...

最新文章

  1. 查看docker镜像的dockerfile脚本json信息
  2. 详解在visual studio中使用git版本系统(图文)
  3. Ubuntu 用户安装 MATE
  4. Linux 命令之 gunzip -- 用来解压缩文件
  5. python中自定义模块导入飘红_hadoop streaming 中跑python程序,自定义模块的导入
  6. Spring4.x(3)---工厂模式设计IOC容器
  7. 已有Unity工程升级到LWRP/HDRP后材质都变洋红色了,怎么办?
  8. 1.2、安装Django-1.5.1及所需要的Python2.74环境
  9. sql server2008如果表中已经有很多条记录,再添加一个非空字段
  10. js文件上传不用点击上传按钮自动上传
  11. java sort类_JAVA Collections工具类sort()排序方法
  12. Linux运维基础入门(二):网络基础知识梳理02
  13. 几行python代码实现Windows软件卸载
  14. 极域电子教室V4窗口化
  15. Excel 对比两个表的相同列内容是否一致
  16. stokes方程matlab,【Fluent】雷诺方程:推导与求解(附MATLAB代码)
  17. 安装和使用openBMC官网维护的qemu
  18. MyBatis14 缓存
  19. 【实例】VBA excel 隔行插入行与列
  20. 知乎万赞:什么样的程序员在35岁以后依然被公司抢着要?打破程序员“中年危机”

热门文章

  1. windows批处理执行多条命令
  2. 中国已与36个国家(地区)海关实现“经认证的经营者”(AEO)互认
  3. 267. Palindrome Permutation II --back tracking 以及palindrome 的优化方法ing
  4. python 安装pip和Django
  5. 关于Java浮点数运算精度丢失问题
  6. 关于linux交换分区的增大
  7. 我之所以抛弃Java而选择Kotlin的10个理由
  8. 【WPF】绑定Hyperlink超链接
  9. MySQL读取配置文件的顺序、启动方式、启动原理
  10. 解析Integer比较