Предполагая, что вы хотите бесконечный цикл и работаете в рамках объекта ...
...
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);
}...
Примечания:
Я использую метод старой школы подчеркивания частных функций на интерфейсе. Вам не нужно называть свои переменные таким образом, и они не являются частными.
Вы заметите, что я храню «это» в «ручке». Вы не можете всегда полагаться на область этого, например, на вызов функции объекта из пузыря событий, вызов ее из открытого интерфейса или ссылку на функцию внутри объекта. Поэтому я просто делаю это как соглашение.
Поместите этот код в ваш объект, вызовите функцию 'start', и он должен продолжать делать свое дело, пока вы не покинете страницу. Кроме того, убедитесь, что вы удалили рекурсивные тайм-ауты, чтобы не было ошибок при обновлении страницы или навигации по странице.