requestAnimationFrame实现动画
2016-07-11 16:49
696 查看
大部分浏览器支持的最小绘制间隔是16.7ms,举例,如果你使用setInterval(function(){}, 10)即每隔10ms绘制一次页面,将会导致部分动画帧的丢失,造成动画的不连贯卡顿,16.7ms是1000/60的计算结果,即浏览器最大支持每秒绘制60帧
requestAnimationFrame是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态的话,动画会自动暂停,有效节省了CPU开销,且会合理安排浏览器的最小绘制间隔,不会造成动画卡顿
可以直接通过requestAnimationFrame(callback)调用,接收一个函数作为回调,返回一个ID,通过把该ID传给window.cancelAnimationFrame()可以取消该动画
兼容性解决方案
http://www.cnblogs.com/Wayou/p/requestAnimationFrame.html
requestAnimationFrame是由浏览器专门为动画提供的API,在运行时浏览器会自动优化方法的调用,并且如果页面不是激活状态的话,动画会自动暂停,有效节省了CPU开销,且会合理安排浏览器的最小绘制间隔,不会造成动画卡顿
可以直接通过requestAnimationFrame(callback)调用,接收一个函数作为回调,返回一个ID,通过把该ID传给window.cancelAnimationFrame()可以取消该动画
兼容性解决方案
(function() { var lastTime = 0; var vendors = ['webkit', 'moz']; for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || // Webkit中此取消方法的名字变了 window[vendors[x] + 'CancelRequestAnimationFrame']; } if (!window.requestAnimationFrame) { window.requestAnimationFrame = function(callback, element) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16.7 - (currTime - lastTime)); var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; }; } if (!window.cancelAnimationFrame) { window.cancelAnimationFrame = function(id) { clearTimeout(id); }; } }());参考链接:
http://www.cnblogs.com/Wayou/p/requestAnimationFrame.html
相关文章推荐
- 关于UICollectionView一些笔记
- iOS 开发UidatePicker 改变字体颜色的方法
- 关于UITableView使用
- 关于UI的一些笔记
- 关于UILabel
- 关于UIButton
- ui笔记1
- arduino gps
- UIKIT详解之UITextView全面解析
- 队列(Queue)
- ios基础控件UILabel
- build.gradle
- UIView事件传递
- iOS获取UUID,并使用keychain存储
- Android ContentProvider query参数
- webpack + vuejs(都是1.0的版本) 基本配置(一)
- ios AudioQueueStart returns -50 录音失败问题
- 使UILabel垂直考上对齐
- UIModalPresentationStyle和UIModalTransitionStyle
- Error running test: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.