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. soap request by afnetworking2.X/3.X

    for 2.X 参考 http://jiapumin.iteye.com/blog/2109378 AFHTTPRequestOperationManager *manager = [AFHTTPRe ...

  2. Cocoapods配置

    这真是蛋疼的东西,配置了几次,每次都不同,每次都折腾半天.这一段时间应该不会变了,记录下来. 一 换源 看了教程都说官方源https://rubygems.org/不能访问,我特意点了一下,发现能访问 ...

  3. iOS 横竖屏切换(应对特殊需求)

    iOS 中横竖屏切换的功能,在开发iOS app中总能遇到.以前看过几次,感觉简单,但是没有敲过代码实现,最近又碰到了,demo尝试了几种情况,这里就做下总结.注意 横屏两种情况是反的你知道吗? UI ...

  4. Android笔记: 查看SDK源码

    Eclipse中设置查看JavaAndroid源码及文档的方法.pdf 经验证方法可行

  5. Qt串口通信接收数据不完整的解决方法

    在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况.因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不 ...

  6. Sql用变量拼语句

    CREATE PROC Test_GetCollegeInfo @type int AS BEGIN ),@v int,@sql nvarchar(max) Begin )) END ELSE BEG ...

  7. wkwebview a target="_blank" 打不开链接的解决方案

    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigatio ...

  8. RFC-2068-http

    本文档规定了互联网社区的标准组协议,并需要讨论和建议以便更加完善.请参考 “互联网官方协议标准”(STD 1)来了解本协议的标准化状态.本协议不限流传发布. 版权声明 Copyright (C) Th ...

  9. Quartz.NET

    http://www.360doc.com/userhome.aspx?userid=11741424&cid=2#

  10. cat *.txt | grep '>' | wc -l

    find the line where the '>' located, and make a statistic.