码迷,mamicode.com
首页 > 其他好文 > 详细

requestAnimationFrame()

时间:2016-01-28 16:43:15      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:

因为settimeout和setinterval是无法保证执行时间的。加上浏览器的定时器不是精确到1毫秒:
Ie8及之前版本为15.625,也就是你设定的时间为0-15的话,那么最终执行可能是0毫秒或者15毫秒后执行
Ie9之后和chrome为4
火狐和safari为10
当该页面被切换出去,非激活,对定时器也有影响

 

Css动画浏览器知道目前有动画在实现,而用传统的定时做动画,浏览器不知道这是动画,因此才出现了 requestAnimationFrame,这样浏览器就知道在执行动画了,会进行优化。

 

这方法接受一个函数,在这函数里你可以放心修改在下次重绘时生效的Dom样式。他不是自己循环调用的,需要自己定义循环和停止。
火狐实现的里面函数接受一个时间戳,指示下次重绘发生的确切发生时间
chrome可以接受了第二个参数,表明动画在那个元素上发生,控制重绘范围。

 

兼容:
(function(){
function draw(timestamp){
//calculate difference since last repaint
var drawStart = (timestamp || Date.now()),
diff = drawStart - startTime;
//use diff to determine correct next step
//reset startTime to this repaint
startTime = drawStart;
//draw again
requestAnimationFrame(draw);
}
var requestAnimationFrame = window.requestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.msRequestAnimationFrame,
startTime = window.mozAnimationStartTime || Date.now();
requestAnimationFrame(draw);
})();

requestAnimationFrame()

标签:

原文地址:http://www.cnblogs.com/chuangweili/p/5166369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!