用requestAnimationFrame优化你的javascript动画

有了css3,我们不在需要Flash来制作好看的动画,一般情况下,我们甚至不需要javascript。但是css3 在一些案例中有些不足。如果你需要计算或重新计算你的动画,那就离不开javascript。尽管不必使用setTimeout 和 setInterval。这样做的缺点是在定义的时间间隔简单地重复一个函数。对于动画,定义的时间间隔不是让他们工作的最好方式。如果您已经使用了这2个函数,您可能已经遇到了困难,在寻找与所需的动画步骤的时间间隔的值。此外,setTimeout和setInterval很少显示同步的刷新率,从而导致效果动画不能准确给出。

requestanimationframe浏览器里的 API

介绍html5中名叫requestanimationframe的一种选择。除了一个例外,它的运作模式和之前的函数非常相似。用下边的代码而不是设置刷新速率的间隔,在浏览上进行。在setTimeout和setInterval的比较尤其明显。当浏览器上有一个以上的动画运行时,就会感觉不流畅。而requestanimationframe会降低这个每帧的速度,必要时,保持动画的流畅。

  1. var schritt = 0;
  2. function animation() {
  3. schritt += 10;
  4. document.getElementById("element").style.left = schritt + "px";
  5. window.requestAnimationFrame(animation);
  6. }
  7. window.requestAnimationFrame(animation);

在这个例子中,我们让一个元素从左到右每10px动一次。默认的速度通常是每秒60帧。

由于CPU的不同,可能会有差异。浏览器也不是有一个固定的帧速率。requestanimationframe的另一个优点是,只在可见的窗口或选项卡动画运行。当动画被发现在一个窗口或标签,是不活跃的时候,动画会停止,但自动恢复后的窗口或标签时,会再次运行。想要手动的停止动画, 可以使用cancelAnimationFrame这个函数。

加厂商前缀浏览器才能支持

在写这篇文章时,当时只有WebKit,Mozilla最新的Internet Explorer支持requestanimationframe函数。cancelanimationframe函数目前限于Mozilla。由于函数是比较新的,每个浏览器都需要一个不同的语法。你可以使用一个变量来设置相应的前缀:

  1. var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;

结论:动画的性能靠requestAnimationFrame本身的功能来实现,他们是非常简单,速度更快,更可靠。因此,你应该尽可能选择这种方法,而不是使用传统的方法,对老的浏览器实行兼容策略。特别是移动端的用户将会从这个方法中感受到好处。如果你正在寻找一个好的测试比较,首选微软的IE开发测试

原文链接;http://www.gbtags.com/gb/share/9628.htm

时间: 2024-10-11 11:05:18

用requestAnimationFrame优化你的javascript动画的相关文章

RequestAnimationFrame更好的实现Javascript动画

一直以来,JavaScript的动画都是通过定时器和间隔来实现的.虽然使用CSS transitions 和 animations使Web开发实现动画更加方便,但多年来以JavaScript为基础来实现动画却很少有所改变.直到Firefox 4的发布,才带来了第一种对JavaScript动画的改善的方法.但要充分认识改善,这有利于帮助我们了解web动画是如何演变改进的. 定时器Timer 用于创建动画的第一个模式是使用链式setTimeout()调用.在Netscape 3′s hayday的很

javascript动画效果之缓冲动画(修改版)

在编写多块同时触发运动的时候,发现一个BUG, timer = setInterval(show, 30);本来show是一个自定义函数,当设为timer = setInterval(show(one,two), 30);时,发现show里面的参数one和two无法被导入,所以需要做以下代码改进和优化 原版的html和css代码在这里javascript动画效果之缓冲动画 js代码如下 1 <script> 2 function $(id) { 3 return typeof id === &

JavaScript动画知多少?

今天,小学生以自己浅薄的见地,在前辈大能的基础上写这篇文章,希望给大家打开一扇窥探JavaScript(以下简称JS)动画的窗户. JS如何制造出动画效果? 结合浏览器提供的 setInterval 或 setTimeout API,高频改变DOM元素的一些属性,即可创造一个肉眼可见的动画效果.一个看起来非常流畅的JS动画除了需要良好的变换算法外,与其执行宿主也是非不开的.程序写得再好,如果浏览器过于老旧,电脑CPU性能低下,也会出现卡顿,甚至卡死. 执行一个动画函数对于浏览器来说是个苦差,设置

JavaScript网站设计实践(三)设计有特色的主页,给主页链接添加JavaScript动画脚本

原文:JavaScript网站设计实践(三)设计有特色的主页,给主页链接添加JavaScript动画脚本 一.主页一般都会比较有特色,现在在网站设计(二)实现的基础上,来给主页添加一点动画效果. 1.这里实现的动画效果是:当鼠标悬停在其中某个超链接时,会显示出属于该页面的背景缩略图,让用户知道这个链接的页面大概内容是什么. 效果图: 2.实现这个效果的思路 (1)把主页的几个链接的背景图片缩放到150px*150px,拼成一张750*150的图片,并保存为slideshow.png,存放到ima

Javascript动画效果(四)

Javascript动画效果(四) 前面我们自己写了一个小小的关于js动画的插件,下面我们来使用之前的框架来完成我们想要的动画效果.我们经常在淘宝网中看到,鼠标经过某一图片时,该图片有从上滚出而又从下滚入的效果,那么那种效果是如何实现的呢? 首先我们我们完成该效果的html和css代码,代码如下: html部分代码: <div id="move"> <a href="#"><i><img src="images/1

javascript动画系列第一篇——模拟拖拽

× 目录 [1]原理介绍 [2]代码实现 [3]代码优化[4]拖拽冲突[5]IE兼容 前面的话 从本文开始,介绍javascript动画系列.javascript本身是具有原生拖放功能的,但是由于兼容性问题,以及功能实现的方式,用的不是很广泛.javascript动画广泛使用的还是模拟拖拽.本文将详细介绍该内容 原理介绍 模拟拖拽最终效果和在桌面上移动文件夹的效果类似 鼠标按下时,拖拽开始.鼠标移动时,被拖拽元素跟着鼠标一起移动.鼠标抬起时,拖拽结束 所以,拖拽的重点是确定被拖拽元素是如何移动的

慕课网javascript动画特效 多透明度 源代码

慕课网javascript动画特效 多透明度 源代码<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>多物体运动</title> <style> div{ width:200px; height:100px; background:yellow; margin-bottom: 20px; filte

JavaScript动画工作原理之(完结篇)

原作者:Steven Riche 发布时间:2014年2月18日 原文链接:http://code.tutsplus.com/tutorials/javascript-animation-that-works-part-4-of-4--net-35263 翻译:子毅 --------- 将JavaScript进行到底 碎碎两句 折腾了一个多月,杂七杂八的事情加在一起,简直糟透了.博客停了大概有一个月了,从今天起一切都是新的,做好自己就OK了 ---------------------------

Win10系列:JavaScript 动画1

在应用程序中使用动画会使应用显得更加生动,进而给用户带来良好的视觉效果.例如,当用户将某个项添加到列表时,新项不会立即出现在列表中,而是采用动画形式到达相应位置,并且列表中的其他项也采用动画形式移动到新位置,以便为添加的项腾出空间.这样的动画效果能够让用户更清晰地看到变化过程,而不是只能看到变化之后的结果. 应用程序的动画效果可以使用Windows动画库来创建,开发人员无需自己编写动画效果代码即可获得Metro风格的动画外观和效果.另外还可以通过设置页面元素的style对象的相关属性来创建.下面