假设你想要一个无限循环并且在一个对象的范围内工作......
...
animation : ["first","second","third","etc"],
frameDelay : 400,
frameIndex : 0,
animationTimer : null,
start : function() {
// remember the scope of this object.
var handle = this;
// start the animation.
handle._nextFrame(handle);
},
_nextFrame : function(handle) {
// TODO: use frameIndex to render stuff... such as:
var animation = handle.animation[frameIndex];
$('body').html('<p>'+animation+'</p>');
// count your frames. You might add stuff to the sequence elsewhere.
var numFrames = handle.animation.length;
frameIndex = frameIndex < numFrames ? frameIndex++ : 0;
handle.animationTimer = window.setTimeout(function() {
handle._nextFrame(handle); }, handle.frameDelay);
},
_destroy : function() {
var handle = this;
clearTimeout(handle.animationTimer);
}...
注意:我使用一种老式的方法在接口上强调私有函数。您不必以这种方式命名变量,它们不是私有的。
您会注意到我将“this”存储到“handle”中。您不能总是依赖 this 的范围,例如从事件气泡调用对象函数、从公共接口调用它或在对象内部引用函数。所以我只是将其作为惯例。
将此代码放入您的对象中,调用“开始”函数,它应该继续执行它的操作,直到您离开页面。此外,请确保清理您的递归超时,以免在页面刷新或页面导航时出现错误。