简介

当用JS做动画效果时,一般用setTimeout()setInterval()来进行动画效果的制作,现在好了,出现了一个专门用于处理动画的API——requestAnimationFrame(),表意为“请求动画帧”。


用法

基本语法:

requestAnimationFrame(callback)//callback为回调函数
cancelAnimationFrame(id) //requestAnimationFrame的返回值

requestAnimationFrame参数为一个回调函数,返回ID值。
cancelAnimationFrame用于取消requestAnimationFrame

可以看到和setTimeout/setInterval的用法差不多。

var globalID; //requestAnimationFrame的返回ID//动画处理函数
function animate() {//动画相关的操作...globalID=requestAnimationFrame(animate);//参数为函数回调
}//使用这个函数进行动画停止操作
cancelAnimationFrame(globalID);

优势

浏览器进行优化,动画更流畅;

按浏览器的时间间隔绘制,动画不会掉帧;

窗口没激活时或标签页不可见时,动画将暂停,省计算资源,减少CPU和内存的压力;

更省电,尤其是对移动终端。


兼容性

各浏览器对于API的兼容性:

可以看到,除了IE9-、OpearMini和AndroidBrowser4.3-之外全部都支持,支持率为91.71%,总体还不错。


封装代码

requestAnimationFrame兼容封装代码:

(function() {var lastTime = 0;var vendors = ['webkit', 'moz'];for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];window.cancelAnimationFrame =window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];}if (!window.requestAnimationFrame)window.requestAnimationFrame = function(callback, element) {var currTime = new Date().getTime();var timeToCall = Math.max(0, 16 - (currTime - lastTime));var id = window.setTimeout(function() { callback(currTime + timeToCall); },timeToCall);lastTime = currTime + timeToCall;return id;};if (!window.cancelAnimationFrame)window.cancelAnimationFrame = function(id) {clearTimeout(id);};
}());

代码源于:Paul Irish requestAnimationFrame for Smart Animating


参考文档

Timing control for script-based animations

Using requestAnimationFrame

MDN window.requestAnimationFrame()


博客名称:王乐平博客

博客地址:http://blog.lepingde.com

CSDN博客地址:http://blog.csdn.net/lecepin

HTML5 requestAnimationFrame( ) 动画API相关推荐

  1. android 三维动画效果,9款令人惊叹的HTML5 3D动画应用

    原标题:9款令人惊叹的HTML5 3D动画应用 之前我们已经向大家分享了很多HTML5动画应用了,大部分都非常炫酷,也有一小部分是很实用的.今天我们要向各位HTML5动画爱好者介绍更多的HTML5 3 ...

  2. 《HTML5+JavaScript动画基础》——2.4 JavaScript对象

    本节书摘来自异步社区<HTML5+JavaScript动画基础>一书中的第2章,第2.4节,作者:[美]Billy Lamberta , Keith Peters著,更多章节内容可以访问云 ...

  3. html5 游戏 动画设计,HTML5 Canvas 动画实例

    原标题:HTML5 Canvas 动画实例 在开发在线游戏时,绘制动画是非常重要的.本节介绍一个使用 Canvas API 实现的动画实例--游戏人物的跑步动画. 动画的概念及原理 1.动画 动画是通 ...

  4. classlist使用方法_如何通过使用HTML5的classList API在没有jQuery的情况下操作类

    classlist使用方法 by Ayo Isaiah 通过Ayo Isaiah 如何通过使用HTML5的classList API在没有jQuery的情况下操作类 (How to manipulat ...

  5. Web动画API教程:可爱的运动路径(Motion Path)

    这是介绍浏览器中web动画API的系列教程的第五篇.如果你有什么问题/想法,或者发现我理解错了规范的内容,或是希望我在接下来的文章中对某部分内容进行探讨的话,请在Twitter给我留言吧~@dancw ...

  6. HTML5 Canvas动画效果实现原理

    在线演示 使用HTML5画布能够帮助我们快速实现简单的动画效果,基本原理如下: 每隔一定时间绘制图形并且清除图形,用来模拟出一个动画过程,可以使用context.clearRect(0, 0, x, ...

  7. HTML5 Audio标签API整理(三)

    一.浏览器支持 Internet Explorer 9+, Firefox, Opera, Chrome, 和 Safari 都支持 <audio> 元素. 注意: Internet Ex ...

  8. 视觉盛宴 HTML5 3D动画应用赏析

    以下是一些很棒的HTML5 3D动画应用,值得一看. 1.3D HTML5 Logo动画 HTML5多视角3D旋转动画 HTML5 3D动画实现起来非常方便,之前介绍过基于jQuery的3D旋转插件是 ...

  9. html5网页动画总结--jQuery旋转插件jqueryrotate

    CSS3 提供了多种变形效果,比如矩阵变形.位移.缩放.旋转和倾斜等等,让页面更加生动活泼有趣,不再一动不动.然后 IE10 以下版本的浏览器不支持 CSS3 变形,虽然 IE 有私有属性滤镜(fil ...

最新文章

  1. 肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法
  2. php 给图片增加背景平铺水印代码
  3. 李飞飞、颜宁等8位华人学者入选美国艺术与科学院院士,其中7位女性
  4. java IO之 File类+字节流 (输入输出 缓冲流 异常处理)
  5. Thread.join()练习
  6. vs2017c语言程序添加图标,笔试编程必备技巧——Visual Studio 2017添加自定义代码片段...
  7. 如何画出漂亮的气象(实时流量)图
  8. dnf机器人猜数字奖励_DNF:周年庆策划啪啪打脸,工作人员也出错误,难道又是临时工的锅?...
  9. 目标检测(七)--Fast R-CNN
  10. C2597 LNK2001 C++静态成员函数、变量理解
  11. 正儿八经做MIS系统-1
  12. openstack-mitaka(一) 架构简介
  13. android 自动点击sdk,Android 自动化记录: OPPO 、VIVO SDK 登录自动化处理
  14. TCP/IP网络编程:计算器服务器端/客户端
  15. 最短路 dij floy spfa
  16. 十一、多相流模型-VOF
  17. 郊区春游 (状压dp)
  18. 服务器金蝶上机日志在哪个文件夹,金蝶软件如何查看某用户的上机日志
  19. php mod rewrite.so,开启Apache mod_rewrite模块完全解答
  20. 【百度论文复现赛】ArcFace: Additive Angular Margin Loss for Deep Face Recognition

热门文章

  1. java每日小算法(10)
  2. spark的流失计算模型_使用spark对sparkify的流失预测
  3. leetcode374. 猜数字大小(二分法)
  4. java中抽象类继承抽象类_Java中的抽象类用示例解释
  5. 协作机器人 ai算法_如果我们希望人工智能为我们服务而不是不利于我们,我们需要协作设计...
  6. jsp导出数据时离开页面_您应该在要离开的公司开始使用数据
  7. Spring中WebApplicationInitializer的理解
  8. 深入分析Spring 与 Spring MVC容器
  9. Java--Socket通信
  10. 实现复选框的单选效果