requestAnimationFrame : 调用这个方法,就是告诉浏览器要执行动画了,从而浏览器自动计算动画时间间隔,从而在恰当的时候刷新UI, 动画更加平滑。

他的用法和setTimeout() 一致,只是不用告诉浏览器循环间隔,而是让浏览器自己决定,各大浏览器都会充分利用自己的性能。

创建一个简单的动画,

function animation(){
     var div = document.getElementById("div1");
     div.style.left = div.offsetLeft + 10 + "px";
}

然后调用requestionAnimationFrame 方法,他接受一个参数,就是动画函数。

requestAnimationFrame(animation);

执行函数后,浏览器重绘DOM, div 向右移动10px,这时就停止了。如果再次调用 这个函数,div 又向右移动10px; 也就是说每执行一个requestAnimationFrame(animation); div 就向右移动10px;

因此创建循环动画,就需要在 动画函数中调用 requestAnimationFrame(animation);

function animation(){
    var div =document.getElementById("div1");
    div.style.left = div.offsetLeft +10 +"px";
    requestAnimationFrame(animation);
}
 requestAnimationFrame(animation);  

其次 还提供了一个cancelAnimationFrame方法,它接受一个参数,用于取消动画。 参数就是 requestAnimationFrame(animation) 的返回值,和setTimeout 返回值一样。

完整的requestAnimationFrame动画。

<div id="div1">
    ddd
</div>
<script>
    var timer = null;
    var div = document.getElementById("div1");
    function animation(){
        div.style.left = div.offsetLeft + 10 + "px";
        if(div.offsetLeft > 800){
            cancelAnimationFrame(timer);
        }else {
            requestAnimationFrame(animation);
        }
    }
    timer =requestAnimationFrame(animation);
</script>

requestAnimationFrame 动画的更多相关文章

  1. 移动端 transition动画函数的封装(仿Zepto)以及 requestAnimationFrame动画函数封装(仿jQuery)

    移动端 css3 transition 动画 ,requestAnimationFrame 动画  对于性能的要求,h5优先考虑: 移动端 单页有时候 制作只用到简单的css3动画即可,我们封装一下, ...

  2. requestAnimationFrame动画方法

    一.动画方式 在HTML5/CSS3时代,实现动画的方式有许多种: 你可以用css3的animation和@keyframes: 可以用css3的transition: 还可以用原始的setTimeo ...

  3. Window.requestAnimationFrame()动画更新

    概述 Window.requestAnimationFrame()方法告诉浏览器你希望执行动画,并且再下一次重绘之前要求浏览器调用一个特定的函数去更新动画.该方法把一个回调函数作为参数,该回调函数会在 ...

  4. requestAnimationFrame动画封装

    function Animator(duration, progress) { this.duration = duration; this.progress = progress; this.nex ...

  5. 简单的requestAnimationFrame动画

    html部分 <div id="test" style="width:1px;height:17px;background:#0f0;">0%< ...

  6. 移动端 touchmove高频事件与requestAnimationFrame的结合优化

    移动端最高频耗内存的的操作  莫属 touchmove 与scroll事件  两者需要 微观的 优化,使用 requestAnimationFrame性能优化 H5性能优化requestAnimati ...

  7. Html5游戏开发-图形与动画(一)

    最近研究了一下出来了很久的HTML5,总结了一下,准备来个系列,文中也许有很多问题,欢迎大家指正. Canvas介绍 canvas用于在网页中绘制图形的一个元素,具体内容请查看 -> HTML5 ...

  8. Canvas动画基础之碰撞检测

    在Canvas中进行碰撞检测,大家往往直接采用游戏引擎(Cocos2d-JS.Egret)或物理引擎(Box2D)内置的碰撞检测功能,好奇的你有思考过它们的内部运行机制吗?下面将针对基本的碰撞检测技术 ...

  9. Html5 Canvas动画基础碰撞检测的实现

    在Canvas中进行碰撞检测,大家往往直接采用游戏引擎(Cocos2d-JS.Egret)或物理引擎(Box2D)内置的碰撞检测功能,好奇的你有思考过它们的内部运行机制吗?下面将针对基本的碰撞检测技术 ...

随机推荐

  1. rabbitmq之partitions

    集群为了保证数据一致性,在同步数据的同时也会通过节点之间的心跳通信来保证对方存活.那如果集群节点通信异常会发生什么,系统如何保障正常提供服务,使用何种策略回复呢? rabbitmq提供的处理脑裂的方法 ...

  2. 深入理解Spark RDD

    RDD是什么? RDD,全称是Reslilient Distributed Datasets,是一个容错的,并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区.同时,RDD还 ...

  3. Samba配置

    https://wiki.samba.org/index.php/Samba_AD_DC_Port_Usage 安装后开放端口 1    ACCEPT     tcp  --  0.0.0.0/0   ...

  4. Inside Flask - flask 扩展加载过程

    Inside Flask - flask 扩展加载过程 flask 扩展(插件)通常是以 flask_<扩展名字> 为扩展的 python 包名,而使用时,可用 import flask. ...

  5. iOS,自动布局autoresizing和auto layout,VFL语言

    1.使用autoresizing 2.使用autolayout 3.VFL语言(Visual Format Language:可视化格式语言) 使用autoresizing 点击xib文件,去掉使用a ...

  6. RDIFramework.NET 框架之组织机构权限设置

    RDIFramework.NET 框架之组织机构权限设置 对于某些大型的企业.信息系统,涉及的组织机构较多,模块多.操作权限也多,对用户或角色一一设置模块.操作权限等比较繁琐.我们可以直接对某一组织机 ...

  7. MFC 框架技术简单研讨

    引用:http://www.cnblogs.com/chinazhangjie/archive/2011/09/20/2181986.html 正文: 第一讲 Win32 App  和  MFC Fr ...

  8. AppleWatch___学习笔记(一)开发思路和框架

    一.开发须知 如果你没有开发过 iphone,直接来做watch,我建议你不要这么做,不是不可以,而是目前所有的第三方应用都必须基于iphone的扩展,原生的watch应用,苹果目前还没有开放给开发者 ...

  9. php学习01

  10. 自定义分词器Analyzer

    Analyzer,或者说文本分析的过程,实质上是将输入文本转化为文本特征向量的过程.这里所说的文本特征,可以是词或者是短语.它主要包括以下四个步骤: 1.分词,将文本解析为单词或短语 2.归一化,将文 ...