【发布时间】:2017-11-30 05:00:25
【问题描述】:
//
// version 1
//
var requestAnimFram = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequsetAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
}
})();
//version 1 usage
function main(){
//main loop
...
requestAnimFram(main);
}
main();
//
// version 2
//
var animFram = {
req: window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
},
ccl: window.cancelAnimationFrame ||
window.mozCancelAnimationFrame,
myReq: 0
};
//version 2 usage
function main(){
...
aniFram.myReq = aniFram.req(main);
}
main();
function stop(){
aniFram.ccl(myReq);
}
在探索一些示例代码时,我发现了requestAnimationFrame。版本 1 是从中雕刻出来的,它工作正常。搜索了一阵子,我也找到了cancelAnimationFrame,想两个都用。所以我做了一个虚拟页面进行测试。第 2 版就是从它雕刻出来的。
问题是,它不会循环。所以,我有两个问题。
这样用
requestAnimationFrame是不行的吗?如果是这样,为什么会这样?如果有可能——但我做错了,我怎么能做到这一点?
【问题讨论】:
-
您的模块中有语法错误:
ccl: ccl, myReq: 0; // Remove semicolon -
"除非我尝试扭曲它,否则它工作正常。" - 请告诉我们你是如何尝试扭曲它的。
-
1) 可以编辑问题以使其变得更好,但请确保不要将其更改为完全不同的问题,尤其是在已经有答案的情况下。 2) 您可以通过单击 (X) 删除自己的 cmets,您可以将我的 cmets 标记为“已过时”,但我自己删除它们会更容易。
-
@Nathan P. 请您删除您的评论好吗?谢谢。
-
@Bergi 一切都完成了 :)
标签: javascript this requestanimationframe native-methods