gpt4 book ai didi

javascript - requestAnimationFrame,非全局?

转载 作者:行者123 更新时间:2023-11-30 12:55:05 30 4
gpt4 key购买 nike

所以我正在尝试创建一个“Animator”模块,它基本上可以轻松启动和停止 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。这是因为在原型(prototype)的 .animate 函数上,我希望能够访问这个对象的更新函数。问题是当我这样做时,就像这样:

Animator.prototype.animate = function( ){

whichAnimator.update();

whichAnimator.requestId = requestAnimationFrame( whichAnimator.animate( whichAnimator ) );

}

我超出了最大堆栈调用。

我想我想知道最好的方法是什么,因为此时我显然不知道我在做什么。

如果您有任何问题,请提出,提前感谢您抽出时间!

最佳答案

.bind 做到了!

感谢@kalley

Animator.prototype.start = function(){
this.running = true;
this.animate();
}

Animator.prototype.stop = function(){
this.running = false;
}

Animator.prototype.animate = function( ){

this.stats.update();
this.update();

if( this.running == true ){
window.requestAnimationFrame( this.animate.bind( this ) );
}

}

关于javascript - requestAnimationFrame,非全局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19471247/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com