所以我正在尝试创建一个“动画师”模块,它基本上可以轻松启动和停止 requestAnimationFrame 循环
define(function(require, exports, module) {
var a = require( 'js/lib/stats.min.js' );
function Animator(){
this.stats = new Stats();
this.stats.domElement.style.position = 'absolute';
this.stats.domElement.style.bottom = '0px';
this.stats.domElement.style.right = '0px';
this.stats.domElement.style.zIndex = '999';
this.requestAnimationFrame = requestAnimationFrame;
document.body.appendChild( this.stats.domElement );
}
Animator.prototype.start = function(){
this.animate( this );
}
Animator.prototype.stop = function(){
if (requestId) {
cancelAnimationFrame(this.requestId);
this.requestId = undefined;
}
}
Animator.prototype.animate = function( ){
this.update();
this.requestId = this.requestAnimationFrame( this.animate );
}
// Empty function, because it will be user defined
Animator.prototype.update = function(){
}
return Animator
});
正如你所知道的,我在这里做了一些非法的事情:
首先,我试图将 requestAnimationFrame 分配给 this.requestAnimationFrame。这是因为在原型的 .animate 函数上,我希望能够访问这个对象的更新函数。问题是当我这样做时,像这样:
Animator.prototype.animate = function( ){
whichAnimator.update();
whichAnimator.requestId = requestAnimationFrame( whichAnimator.animate( whichAnimator ) );
}
我超出了最大堆栈调用。
我想我想知道最好的方法是什么,因为此时我显然不知道我在做什么。
如果您有任何问题,请提出,并提前感谢您的时间!