在少数项目中添加延迟

时间:2016-10-31 17:39:47

标签: javascript jquery

我遇到了一个小问题。所以我有div名称数组,我想将它们添加为半秒,然后按顺序删除它们。所以首先在一秒钟后显示,在半秒后消失,然后在第二秒后消失等等。我循环通过数组,没有真正发生:/ 请帮我这个功能:/



function showAndRepeat(){
  for(var z=0;z<clickNext.length;z++){
    console.log(colors[clickNext[z]]);
    setTimeout(function(){$(colors[clickNext[z]]).addClass(colorNames[clickNext[z]])},1000);
    setTimeout(function(){$(colors[clickNext[z]]).removeClass(colorNames[clickNext[z]])},1500);
  }
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

假设jQuery代码工作正常。 试试这个:

function showAndRepeat(){
  for(var z=0;z<clickNext.length;z++){
    console.log(colors[clickNext[z]]);
    (function(zee){
        setTimeout(function(){$(colors[clickNext[zee]]).addClass(colorNames[clickNext[zee]])},1000);
        setTimeout(function(){$(colors[clickNext[zee]]).removeClass(colorNames[clickNext[zee]])},1500);    
    })(z);
  }
}

简单地说,创建一个闭包。

for循环是同步操作,而setTimeout是异步。因此,当setTimeout执行时,for循环已经运行,z的最新值将被输入setTimeout来电。