在渲染页面动画的时候,其实也没有必要用定时器(setInterval),其实requestAnimationFrame()和cancelAnimationFrame()也能达到相应的效果,他是HTML5中专门为 js 实现动画效果提供的一个方法。

requestAnimationFrame()
1 这个方法不需要我们指定时间间隔就能实现动画效果;
2 浏览器每次刷新,都会调用 requestAnimationFrame 指定的回调函数;
3 如果有多个 requestAnimationFrame ,那么在这一次渲染过程中,会将所有的DOM操作一次性处理,这样就提高了DOM渲染的性能。
//开启动画
var animationID=requestAnimationFrame(callback);
//关闭动画
window.cancelAnimationFrame(animationID);
animate()
function animate() {
$("img").css("left", -index * width);
$("body").css("background-position", -t * + "px center")
index++;
t++;
if (index >= ) {
index = ;
}
requestAnimationFrame(animate);
}
setInterval / setTimeout存在的问题:
1 指定的之间间隔不准确
2 如果页面中有多个定时器,每个定时器都会操作DOM,那么会造成性能问题
重绘和重排(DOM渲染)
3 造成动画丢帧
浏览器刷新一次,而setInterval 执行了两次,那么前面一帧就丢掉了
这样就会让动画不完整
 
屏幕的刷新频率: 60HZ(赫兹) 1秒钟刷新60次
人眼能够识别的最小频率是:60HZ,如果比 60赫兹小了,那么人眼就看到卡顿了
 
60HZ 也是决定应用程序是否卡顿的一个指标!
1s / 60 ≈ 16.67ms

关于requestAnimationFrame()和cancelAnimationFrame()与定时器之间的比较的更多相关文章

  1. android开发 系统时间与定时器之间有关系嘛?

    如题: android开发 系统时间与定时器之间有关系嘛? 答案:有. 看定时器源码: /* * Schedule a task. */ private void scheduleImpl(Timer ...

  2. requestAnimationFrame 与 cancelAnimationFrame

    API接口 Window对象定义了以下两个接口: partial interface Window { long requestAnimationFrame(FrameRequestCallback ...

  3. [js高手之路] html5新增的定时器requestAnimationFrame实战进度条

    在requestAnimationFrame出现之前,我们一般都用setTimeout和setInterval,那么html5为什么新增一个requestAnimationFrame,他的出现是为了解 ...

  4. html5新增的定时器requestAnimationFrame

    在requestAnimationFrame出现之前,我们一般都用setTimeout和setInterval,那么html5为什么新增一个requestAnimationFrame,他的出现是为了解 ...

  5. requestAnimationFrame/cancelAnimationFrame——性能更好的js动画实现方式

    用js来实现动画,我们一般是借助setTimeout或setInterval这两个函数,css3动画出来后,我们又可以使用css3来实现动画了,而且性能和流畅度也得到了很大的提升.但是css3动画还是 ...

  6. js动画之requestAnimationFrame

    1.setTimeout和setInterval 在讲setTimeout和setInterval之前,先讲一下异步执行的运行机制.(同步执行也是如此,因为它可以被视为没有异步任务的异步执行.) (1 ...

  7. 深入理解requestAnimationFrame并实现相册组件中的切换动画

    全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/12529885.html,多谢,=.=~ (如果对你有帮助的话请帮我点个赞啦) 通常情况下,我们利 ...

  8. 大熊君学习html5系列之------requestAnimationFrame(实现动画的另一种方案)

    一,开篇分析 Hi,大家好!大熊君又和大家见面了,(*^__^*) 嘻嘻……,这系列文章主要是学习Html5相关的知识点,以学习API知识点为入口,由浅入深的引入实例, 让大家一步一步的体会" ...

  9. requestAnimationFrame制作动画:旋转风车

    在以往,我们在网页上制作动画效果的时候,如果是用javascript实现,一般都是通过定时器和间隔来实现的,出现HTML5之后,我们还可以用CSS3 的transitions和animations很方 ...

随机推荐

  1. APUE学习笔记3——文件和目录

    1 简介 之前学习了执行I/O操作的基本函数,主要是围绕普通文件I/O的打开.读或写.下面继续学习Unix文件系统的其他特征和文件的基本性质.我们将从stat函数开始,了解stat结构所代表的文件属性 ...

  2. What's Dead & Exploded in Swift's exception stack?

    The Swift compiler marks function arguments for a number of reasons, mostly related to internal opti ...

  3. js常用正则表达式大全--如:数字,字符等

    一.校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9 ...

  4. Windows GUI程序自动化之pywinauto

    一. pywinauto知识点总结 官方英文版文档网址:https://pywinauto.readthedocs.io/en/latest/index.html 1.1 pywinauto的安装与配 ...

  5. PHP回顾之协程

    转载请注明文章出处: https://tlanyan.me/php-review... PHP回顾系列目录 PHP基础 web请求 cookie web响应 session 数据库操作 加解密 Com ...

  6. Vue.js 渲染简写样式存在的问题

    引出问题 首先我们来这么一个问题, 这里是完整的 jsfiddle demo or codepen demo 给一个元素绑定两个边框样式, 右侧和底部都为1px的红色边框 styleA: { bord ...

  7. Java基础学习总结(61)——Java项目开发要注意的60个问题

    1. 首先写代码的时候最好不要有缺陷.最好的修复方法就是让 bug 胎死腹中. 良好的单元测试 强制数据库约束 使用输入验证框架 避免未实现的"else"条件 在应用到主程序之前知 ...

  8. spring data JPA 中的多属性排序

    在此介绍我所用的一种方式: 第一步,引包 import org.springframework.data.domain.Sort;import org.springframework.data.dom ...

  9. springmvc上传操作

    创建虚拟目录  配置tomcat的配置文件server.xml 在真实路径中放置一个图片 启动服务器:  直接可以通过配置的虚拟路径来访问真实路径中的图片 所以 我们在做图片上传的操作的时候   就可 ...

  10. UI组件之AdapterView及其子类(三)Spinner控件具体解释

    Spinner提供了从一个数据集合中高速选择一项值的办法. 默认情况下Spinner显示的是当前选择的值.点击Spinner会弹出一个包括全部可选值的dropdown菜单或者一个dialog对话框,从 ...