2014-02-11 44 views
2

我試圖讓多個進度條同時動畫,但不同的值。使用下面的HTML和jQuery,兩個條都會達到相同的最終值。如何擁有多個動態jQuery進度條

<progress id="progressbar" value="50" max="100"></progress><span class="progress-value">0%</span> 
<progress id="progressbar" value="30" max="100"></progress><span class="progress-value">0%</span> 

......

<script> 
$(document).ready(function() { 

var progressbar = $('#progressbar'), 
     max = progressbar.attr('value'), 
     time = (1000/max)*2,  
     value = 0 

    var loading = function() { 
     value += 1; 
     addValue = progressbar.val(value); 

     $('.progress-value').html(value + '%'); 

     if (value == max) { 
      clearInterval(animate);      
     } 
    }; 

    var animate = setInterval(function() { 
     loading(); 
    }, time); 

}); 
</script> 

我知道,這是因爲進度的兩個實例只是遵循同樣的jQuery,但我不知道如何使它的動態。任何幫助,將不勝感激。

編輯:

var progressbar2 = $('#progressbar2'), 
max2 = progressbar2.attr('value'), 
time2 = (1000/max2)*2,  
    value2 = 0 

    var loading2 = function() { 
    value2 += 1; 
    addValue = progressbar2.val(value); 

    $('.progress-value2').html(value + '%'); 

    if (value2 == max2) { 
     clearInterval(animate2);      
    } 
}; 
var animate2 = setInterval(function() { 
    loading2(); 
}, time); 

此作品(加上原有功能的克隆),但顯然這不是我想做的事情。有沒有一種方法可以迭代所有可能的進度條,使用類似於for循環的東西?

+2

的ID必須是唯一的,你不能有兩個'ID = 「進度」'。 – Barmar

+0

是的,我知道問題出在哪裏,我只是不知道如何在jQuery中解決它。 – Zach

回答

2

你應該給每個控件一個不同的id,例如: progressbar1,progressbar2等。 您可以使用類選擇器代替id選擇器,然後使用「progress-value」類迭代每個元素。 像這樣:

$('.progress-value').each(function(i, obj) { 
    //your code here 
}); 
+0

感謝您的幫助,我對jQuery非常陌生,但我需要再多問一些。我已將整個代碼放入您提供的類選擇器函數中,但現在我不知道如何選擇特定的進度條ID。我正在嘗試'var progressbar = $('#progressbar'+ i)',但顯然這不起作用。 – Zach

+0

剛剛添加了一個編輯,請看看它,並告訴我,如果我可以做得更好。 – Zach

+0

'$( '進展值')。每個(函數(I){ \t \t變種barID = '#進度' + 1, \t \t進度= $(barID) \t \t最大= progressbar.attr( '值'), \t \t時間=(1000 /最大值)* 2, \t值= 0 變種負荷=函數() { \t值+ = 1; \t的addValue = progressbar.val(值); \t $('。progress-value')。html(value +'%'); \t if(value == max) \t { \t \t clearInterval(animate); \t} \t}; \t \t var animate = setInterval(function(){ \t loading();},time); });'試過,陷入無限循環。 – Zach