2017-02-20 96 views
1

我試圖更改數組中每個元素的不透明度,但每個元素之間有一個輕微的延遲。我已經嘗試了以下簡化代碼片段的一些變體,但每次它們都會隨着延遲而立即更改或者沒有任何變化。這個代碼的正確語法是什麼?使用for循環在數組中的每個元素之間設置延遲

for (let i = 0; i < testArray.length; i++) { 
    setTimeout(function() {testArray[i].style.opacity = ".5"}, 500); 
} 
+4

使用'的setTimeout(函數(){testArray [i]中。 style.opacity =「.5」},500 *(i + 1));' – Viney

+0

如果你被卡住了--https://jsfiddle.net/xjLjt42z/ – Viney

+0

@Novice你可以添加一個答案。這似乎是以前在這裏會問到的,但我找不到一個好的重複。 – JLRishe

回答

2

由於您使用的是let異步性不是問題,所以它只是timing.You只需要更改

setTimeout(function() {testArray[i].style.opacity = ".5"}, 500); 

setTimeout(function() {testArray[i].style.opacity = ".5"}, 500*(i+1)); 

這將增加的500毫秒量等500,1000,1500設置計時器的項目等

0

的情況下,使用setInterval嘗試它沒有與setTimeout喜歡的工作如下:

var counter = 0; 
    var arrayLength =testArray.length; 
    var refOfSetInterval; 

    function changeOpacity(){ 
    if(counter < arrayLength){ 
    testArray[counter].style.opacity = ".5"; 
    counter++; 
    } 
    else{ 
    clearInterval(refOfSetInterval); 
    } 
    } 

    refOfSetInterval = setInterval(changeOpacity,1000); 
0

您可以使用$('').slideUp(2000);方法你的兩個元素之間的延遲,我用這幾個times.its工作正常