Используя setInterval, вы должны быть в состоянии сделать что-то вроде следующего. Там нет рекурсии не происходит вообще. (Конечно, этот пример придуман, но должен объяснить концепцию.)
Рабочий пример: http://jsfiddle.net/TNwAZ/1/
HTML
<div id='myDiv' style="position:relative">div</div>
1012 * Javascript *
var count = 10;
var duration = 500;
var interval = setInterval(function() {
$('#myDiv').text(count).animate({left: '+=50'},duration);
count--; // Decrement count
if(!count) { clearTimeout(interval) }
}, duration );
EDIT:
Не знаю, как вы получаете элементы для анимации, но вот пример размещения ссылок на них в массиве и их циклической обработки.
http://jsfiddle.net/TNwAZ/3/
HTML
<div id='myDiv1' style="position:relative">div 1</div>
<div id='myDiv2' style="position:relative">div 2</div>
<div id='myDiv3' style="position:relative">div 3</div>
Javascript
var divArray = ['myDiv1','myDiv2','myDiv3'];
for(var i in divArray) {
intervalAnimate(divArray[i]);
}
function intervalAnimate(theDiv) {
var count = 10;
var duration = 500;
var interval = setInterval(function() {
$('#' + theDiv).text(count).animate({left: '+=50'},duration);
count--; // Decrement count
if(!count) { clearTimeout(interval) }
}, duration );
}
EDIT:
Эта версия пропускает цикл for
и просто получает коллекцию объектов jQuery и передает их.
http://jsfiddle.net/TNwAZ/5/
HTML
<div id='myDiv1' style="position:relative">div 1</div>
<div id='myDiv2' style="position:relative">div 2</div>
<div id='myDiv3' style="position:relative">div 3</div>
Javascript
var $divs = $('div[id^=myDiv]');
intervalAnimate($divs);
function intervalAnimate(collection) {
var count = 10;
var duration = 500;
var interval = setInterval(function() {
$(collection).text(count).animate({left: '+=50'},duration);
count--; // Decrement count
if(!count) { clearTimeout(interval) }
}, duration );
}