我也刚读过那篇文章,很想自己尝试一下。我尝试在不支持高分辨率计时器的浏览器中为 rAF 回调添加包装器。它使用了 Paul Irish 的原始 polyfill,并添加了以下几行:
var hasPerformance = !!(window.performance && window.performance.now);
// Add new wrapper for browsers that don't have performance
if (!hasPerformance) {
// Store reference to existing rAF and initial startTime
var rAF = window.requestAnimationFrame,
startTime = +new Date;
// Override window rAF to include wrapped callback
window.requestAnimationFrame = function (callback, element) {
// Wrap the given callback to pass in performance timestamp
var wrapped = function (timestamp) {
// Get performance-style timestamp
var performanceTimestamp = (timestamp < 1e12)
? timestamp
: timestamp - startTime;
return callback(performanceTimestamp);
};
// Call original rAF with wrapped callback
rAF(wrapped, element);
}
}
这是所有内容的要点以及使用新代码的更新示例:
https://gist.github.com/4078614
http://jsfiddle.net/timhall/XQpzU/4351/
这种方法旨在将传递给回调函数的参数标准化为高分辨率计时器格式。如果您的现有代码期望这样做,您可以使用类似的方法(正好相反)将高分辨率计时器转换为旧格式,但我认为这是一种回归。
我将在我现在正在进行的一个项目中进行尝试,如果我发现任何问题/改进,我会更新要点。