2017-02-20 53 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工作正常