使用setInterval的,你應該能夠做到像下面。根本沒有遞歸發生。 (當然,這個例子是人爲的,但應該解釋的概念。)
工作例如:http://jsfiddle.net/TNwAZ/1/
HTML
<div id='myDiv' style="position:relative">div</div>
的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);
編輯:
不知道你是如何得到元素的動畫,但這裏將它們的引用在數組中,並遍歷該示例。
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);
}
編輯:
這個版本跳過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);
}
我喜歡這個想法,但我似乎無法得到這個工作在多個div。也就是說,如果你將它封裝在一個函數中,並在myDiv1,myDiv2,myDiv3等的for循環中調用它,可以一次爲它們設置動畫。 – 2010-05-04 13:12:04
我會用一些解決方案更新我的答案。 – user113716 2010-05-04 13:36:24
謝謝!我修改我的代碼來使用setInterval(它工作!),但我有一個計時問題。我必須調整間隔時間的持續時間高於每個動畫的總和,否則它會開始自己踩踏。你介意看看我編輯的代碼來解決我的問題嗎? – 2010-05-04 21:01:00