请解释这个请求动画帧成语
please explain this requestAnimationFrame idiom
有很多地方(例如如何使用requestAnimationFrame?)可以修复window.requestAnimationFrame
如下。我不明白为什么赋值的右侧被包装在函数调用中。
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
};
})();
我以前也想知道同样的事情。我很确定谷歌真的很喜欢关闭。当然,那里没有一个变量,这是一件"安全"的事情。
据我所知,这是完全相同的事情,没有改变对命名空间的干扰(使用这样的闭包的一般原因):
window.requestAnimFrame =
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
};
在 OP 示例中,将代码放入闭包中没有任何作用(至少我知道的是:-)
http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating 这里查找类似的函数,对局部变量执行相同的操作。在这种情况下,如果变量不在闭包内,它将全局结束。
所以涉及两件事:
- 嵌入变量的函数,使它们不会成为全局变量
- 立即执行此函数以运行代码。
这里的即时函数JavaScript是关于这些直接函数的另一个讨论。
万事如意,诺比
requestAnimationFrame
需要一个参数:要运行的函数。但是,setTimeout
需要运行函数以及运行它的延迟。因此,虽然您可以直接分配各个函数,但您必须为 setTimeout
创建一个闭包,以便您可以分配第二个参数。
这基本上是一种咖喱形式。
- 如何设置html元素填充的动画
- 如何使用动画实现纸张推车
- 如何在生成下载文件时显示加载动画
- 剑道网格jQuery动画()问题
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- jQuery Lazy加载动画滚动
- jquery动画可以通过编程链接吗
- Javascript将数学动画化
- 动画.CSS重播
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 如何使用jQuery在动画中期加速动画
- 使用数据上的角度更改设置集合的第一个元素的动画
- 如何使用css动画/javascript使具有背景图像的元素出现
- 如何使用css动画从中心增加边界线
- JQuery动画延长容器不起作用
- 动画CSS进度条
- JavaScript动画从不执行
- 更多延迟动画
- 使用jQuery制作伪元素的动画
- 请解释这个请求动画帧成语