udpated requestAnimationFrame polyfill

This commit is contained in:
mumuy 2016-04-20 16:12:26 +08:00
parent d5b6dafc93
commit 1b63c630b2

37
game.js
View File

@ -3,29 +3,28 @@
* 小型游戏引擎 * 小型游戏引擎
*/ */
//动画处理 // requestAnimationFrame polyfill
if (!Date.now)
Date.now = function() { return new Date().getTime(); };
(function() { (function() {
var lastTime = 0; 'use strict';
var vendors = ['webkit', 'moz']; var vendors = ['webkit', 'moz'];
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; var vp = vendors[i];
window.cancelAnimationFrame = window.requestAnimationFrame = window[vp+'RequestAnimationFrame'];
window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame']; window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame']
|| window[vp+'CancelRequestAnimationFrame']);
} }
if (!window.requestAnimationFrame){ if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) // iOS6 is buggy
window.requestAnimationFrame = function(callback, element) { || !window.requestAnimationFrame || !window.cancelAnimationFrame) {
var currTime = new Date().getTime(); var lastTime = 0;
var timeToCall = Math.max(0, 16 - (currTime - lastTime)); window.requestAnimationFrame = function(callback) {
var id = window.setTimeout(function() { callback(currTime + timeToCall); }, var now = Date.now();
timeToCall); var nextTime = Math.max(lastTime + 16, now);
lastTime = currTime + timeToCall; return setTimeout(function() { callback(lastTime = nextTime); },
return id; nextTime - now);
};
}
if (!window.cancelAnimationFrame){
window.cancelAnimationFrame = function(id) {
clearTimeout(id);
}; };
window.cancelAnimationFrame = clearTimeout;
} }
}()); }());