保持兼容性

当然,就像浏览器 JavaScript 中的大多数东西一样,你不能指望每个地方的所有东西都是一样的。在这种情况下,requestAnimationFrame 在某些平台上可能有一个前缀,并且命名方式不同,例如 webkitRequestAnimationFrame。幸运的是,有一种非常简单的方法可以将所有已知的差异分组到 1 个函数中:

window.requestAnimationFrame = (function(){
    return window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        function(callback){
            window.setTimeout(callback, 1000 / 60);
        };
})();

请注意,最后一个选项(在找不到现有支持时填写)将不会返回要在 cancelAnimationFrame 中使用的 id。然而,有一个有效的 polyfill 编写,修复了这个问题。