requestAnimationFrame动画方法

一、动画方式

在HTML5/CSS3时代,实现动画的方式有许多种:

你可以用css3的animation和@keyframes;

可以用css3的transition;

还可以用原始的setTimeout()、setInterval()达到动画效果,以及jQuery中animate方法;

今天我们要介绍是另一种动画方式:requestAnimationFrame(callback)!

二、基本语法

可以直接调用,也可以通过window来调用,接收一个函数作为回调,返回一个ID值:

ID=requestAnimationFrame(callback)//callback为回调函数

requestAnimationFrame的用法和setTimeout()类似都是单回调,其优势在于跟着浏览器的绘制走。相当一部分的浏览器的显示频率是16.7ms,即1s绘制60次。如果间隔时间小于16.7ms动画就会卡顿,而requestAnimationFrame就是在浏览器绘制是调用动画!总结requestAnimationFrame的优势如下:

1.跟着浏览器的绘制走,动画更流畅;

2.页面最小化了,或者被Tab切换关灯了,页面绘制全部停止,资源高效利用;

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

如果想停止动画调用,方法如下:

cancelAnimationFrame(ID);

三、兼容情况

Android设备压根就不支持嘛!其他设备基本上跟CSS3动画的支持一模一样。

如果需要简单兼容,可这么写:

window.requestAnimFrame = (function(){
  return  window.requestAnimationFrame       ||
          window.webkitRequestAnimationFrame ||
          window.mozRequestAnimationFrame    ||
          function( callback ){
            window.setTimeout(callback, 1000 / 60);
          };
})();

但是呢,并不是所有设备的绘制时间间隔是1000/60 ms, 以及上面并木有cancel相关方法,所以,就有下面这份更全面的兼容方法:

(function() {
    var lastTime = 0;
    var vendors = [‘ms‘, ‘moz‘, ‘webkit‘, ‘o‘];
    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);
    };
}());

然后我们就能像使用setTimeout一样来使用requestAnimationFrame了!

时间: 2024-08-26 13:31:21

requestAnimationFrame动画方法的相关文章

animate动画方法封装:原生JS实现

1 /** 2 * Created by guoyongfeng on 2014/7/7. 3 * @Author guoyongfeng 4 * @Date 2014-07-07 5 * @Version 1.0.0 6 * @update 2014-07-07 7 * @described tween动画库函数封装 8 * 9 */ 10 define('animate/0.0.1', function(){ 11 /** 12 * 13 */ 14 return function(ele,

js 动画方法之requestAnimationFrame

js动画实现的方法到现在有三种 1 css3: 通过animattion+keyframes;或 transition 2. setTimeout/setInterval: setTimeout/setInterval:通过递归调用同一方法来不断更新动画元素以达到动起来的效果,动画过度绘制,浪费 CPU 周期以及消耗额外的电能等问题. 3.requestAnimationFrame: requestAnimationFrame:是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用

Window.requestAnimationFrame()动画更新

概述 Window.requestAnimationFrame()方法告诉浏览器你希望执行动画,并且再下一次重绘之前要求浏览器调用一个特定的函数去更新动画.该方法把一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行. 注意:如果你想在浏览器下次重绘之前继续更新下一帧动画,那么回调函数自身必须再次调用Window.requestAnimationFrame() 当你准备更新你的动画的时候,你应该调用该方法.这会要求你的动画函数在浏览器下次重绘之前被调用.回调的频率一般是60次/秒,但通常

自定义动画方法animate

animate的使用方法:animate(params,speed,callback); 例子:animate({ right: "-=600px",height:"+=400px" }, "slow", function () { $(this).css("border","5px solid red")}); 其中right向左,left向右,height高度变化,width宽度变化. +=表示在当前位

Flash生成HTML5动画方法

  方法一:利用“swiffy”将Flash转换成HTML5动画. 首先,我们需要下载一款基于“Flash”程序的插件,名称为“swiffy”,这是一款由谷歌推出的一个Flash扩展,可以通过“Flash Professinal”软件直接将Flash源文件转换成HTML5动画. “swiffy”下载地址:http://pan.baidu.com/s/1hqHC4te   下载的“swiffy”程序其扩展名为“mxp”格式,双击此文件即可自动打开“Adobe扩展管理器”并安装“Swiffy”扩展应

Jquery动画方法 jquery.animate()

目前在学习Oracle数据库,由于刚接触,学校让练习练习HTML内容,就想起了老师以前提起过的animate方法 animate是jquery的一个方法,这个方法主要功能是能实现比较平滑的动态效果,所以你想做一个简单又不失美观的动态效果不如试试它 下面总结一下以前常用的幻灯片效果实现用的方法: 切换:show(time)/hide(time):刚接触Jquery的时候大家应该用的最多的就是这两个方法,我个人觉得这个方法太丑了,一瞬间消失,或者一瞬间出现 列表滚动:这个多数人会直接使用其css属性

几何画板制作点在线段上的动画方法

几何画板可以使一个点沿某条轨迹运动,使静态变动态,绘制出美观.生动的动态图形,实现动画效果.下面我们通过举例点在线段上的动画作讲解来学习几何画板点动画的制作方法. 具体的操作步骤如下: 打开几何画板,在工作区域画线段AB,在线段AB上任意画一点C. 选中点C,单击“编辑”——“操作类按钮”——“动画”,弹出对话框,单击确定后在工作区中出现了一个“动画点”按钮,可通过该按钮来控制点C在线段AB上的运动.如下图所示,右键单击“动画点”按钮,选择“属性”,可以重新设置点C的运动方向.速度及按钮标签.

jquery的基本动画方法

1 在使用$.extent()的时候,我们一般不放function类型,如果放的话,提前测试下. ?2 Function类型是一种基本类型还是引用类型呢. 3 $('<div>') 指创建一个div   与$('<div></div>')一样的. $('div') 选择所有的div 4 jquery动画5种 第一种 fadeOut    fadeIn 第二种  slideDown slideUp 第三种   hide  show 第四种  animate 第五种 sli

简单的requestAnimationFrame动画

html部分 <div id="test" style="width:1px;height:17px;background:#0f0;">0%</div> <input type="button" value="Run" id="run"/> <script> window.requestAnimationFrame = window.requestAnima