Jquery 我可以使用循环连续淡入div吗?

Jquery 我可以使用循环连续淡入div吗?,jquery,Jquery,我有几首歌想连续播放。我试过: var divs = ["#masterhead", ".links", ".code", ".projects", ".self"] var fade_time = 1000; var pause_time = 500; for(var i = 0; i <= divs.length; i = i + 1) { setTimeout( divs[i].fadeIn(fade_time) , 500) ; } 那么,在较短的代码中我做错了什么呢?使

我有几首歌想连续播放。我试过:

var divs = ["#masterhead", ".links", ".code", ".projects", ".self"]
var fade_time = 1000;
var pause_time = 500;
for(var i = 0; i <= divs.length; i = i + 1)
{
    setTimeout( divs[i].fadeIn(fade_time) , 500) ;
}
那么,在较短的代码中我做错了什么呢?

使用回调

var divs = ["#masterhead", ".links", ".code", ".projects", ".self"]
var fade_time = 1000;
var pause_time = 500;
var i = 0;
function startDisplay() {
  i = 0;
  showNext();
}
// just use this function as a callback, each time, to display the next
function showNext() {
  if (!divs[i]) {
    // dernière div
    return
  }

  setTimeout(function () {
    // you can hide the previous one, for example
    //$(divs[i-1]).hide();
    // take the current div, increment it
    $(divs[i++])
      // fade it in, and use the current function as callback
      .fadeIn(fade_time, showNext);
  }, pause_time);
}
试试这个-

for(var i = 0; i <= divs.length; i = i + 1){
  setTimeout( function(){ 
       $(divs[i]).fadeIn(fade_time);
   } , 500 + (i*pause_time)) ;
}

for(var i=0;i这里有一种更简单的方法,它根本不使用
setTimeout()
;jQuery更清楚地说明了这一点:

for(var i = 0; i < divs.length; i = i + 1)
{
    $(divs[i]).delay(pause_time * i).fadeIn(fade_time);
}
演示:


请注意,如果函数传递给
setTimeout()
使用循环计数器
i
您会遇到一个问题,因为函数在循环完成后才运行,所以它们都会尝试使用
i
的最终值-因此您需要引入一个闭包,这使得此方法更加混乱。

您意识到
divs[i]
只是一个字符串,而不是HTML元素或DOM节点?我确实考虑过这一点,但我是新手,真的不知道我要搜索什么来纠正这一点。你能展示一个(小的)复制你的问题/页面吗?似乎有人已经回答了下面的问题。:)所有答案都有效,但我很高兴你解释了它。谢谢。这将立即调用
.fadeIn()
,并将其返回值传递给
设置超时()。。。
for(var i = 0; i < divs.length; i = i + 1)
{
    $(divs[i]).delay(pause_time * i).fadeIn(fade_time);
}
for(var i = 0; i < divs.length; i = i + 1)
{
    (function(i){
       setTimeout( function() { $(divs[i]).fadeIn(fade_time); }, pause_time * i);
    })(i);
}