2012-11-21 64 views
0

我試圖在循環中重複整個函數,但沒有任何工作。我試過Loop()回調,設置interval()。有人能指引我走向正確的方向嗎?函數重複(簡單)

什麼是重複整個動畫的最佳方法?由於

$(document).ready(function() { 
    $("#slide1").fadeIn(500, function() { 
     $("#slide2").fadeIn(500, function() { 
      $("#slide3").fadeIn(500, function() { 
       $("#slide4").fadeIn(500, function() { 
        $("#slide5").fadeIn(500, function() { 

         $("#slide1").fadeOut(500, function() { 

          $("#slide6").fadeIn(500, function() { 
           $("#slide7").fadeIn(500, function() { 
            $("#slide8").fadeIn(500, function() { 
             $("#slide9").fadeIn(500, function() {}); 
            }); 
           }); 
          }); 
         }); 
        }); 
       }); 
      }); 
     }); 
    }); 
}); 
+3

漂亮的代碼... –

+0

我應該在這裏得到重複?我只看到一個'fadeIn'序列 - > http://jsfiddle.net/RuX5d/ –

回答

3

@Phillip所以,現在你有什麼的問題不斷工程..你只是想的代碼即興..那是正確的? - Vega

嗨維加。是的代碼很好地工作,但想要發生$("#slide1").fadeOut(500, function() {。感謝 - 菲利普

轉換你有一個像下面的代碼,

DEMO:http://jsfiddle.net/RuX5d/5/

$(document).ready(function() { 
    var i = 1, dir = 1, curFx = 'fadeIn'; 
    var interval = setInterval(function() { 
     if (i == 6 && $('#slide1').is(':visible')) { 
      $('#slide1').fadeOut(500);    
      return; 
     } 

     $('#slide'+ i)[curFx](500); 

     i = i + 1*dir; 

     if (i == 10 || i == -1) { 
      dir = (dir == 1)?-1:1; 
      curFx = (curFx == 'fadeIn')?'fadeOut':'fadeIn'; 
     }   
    }, 500); 
}); 

我不是很確定你想要什麼..但我相信您要重複使用fadeInfadeOut內容。

如果是的話,試試我的演示,下面的代碼,

DEMO:http://jsfiddle.net/RuX5d/1/

$(document).ready(function() { 
    var curSlide = 0, dir = 1; 
    var curFx = 'fadeIn'; 
    setInterval(function() { 
     curSlide += 1 * dir; 
     $('#slide' + curSlide)[curFx](500); 
     if (curSlide == 11 || curSlide == 0) { 
      curFx = (curFx == 'fadeIn')?'fadeOut': 'fadeIn'; 
      dir = (dir == 1)?-1: 1; 
     } 
    }, 500); 
}); 
+0

+ 1只有答案,實際上做OP的要求。 – f0x

+1

@ f0x實際上,這非常冗長,並且在這裏還有其他答案可以完成同樣的事情。 –

+0

@Asad編輯完成後;冗長或不是它是做問題的唯一答案。 – f0x

0

這應該處理你在找什麼

function fadeFn() { 
    if (curNum < 10) { 
     if (direction === 'Out') { 
      direction = 'In'; 
      curNum++; 
     } 
     else { 
      direction = 'Out'; 
     } 
     $("#slide" + curNum)['fade' + direction](500, fadeFn); 
    } 
} 

var curNum = 0; 
var direction = 'Out'; 
$(document).ready(function() { 
    fadeFn(); 
}); 
+0

這並不是重複整個過程。 – Phillip

+0

我沒有得到你想要的問題'fadeIn'之間'fadeOut',現在應該工作。 – zbrunson

+0

zshooter,幻燈片1淡出的原因是因爲幻燈片1是一個大的圖像,其餘的幻燈片是更大的幻燈片1前面的較小的瓷磚褪色。 – Phillip

1

使用setTimeout。 IDK你想究竟如何做到這一點......但可能是這樣的:

var i = 1; 
$(document).ready(function(){ 
    setTimeout(function(){ 
    var slide = '#slide' + i++; 
    $(slide).fadeIn();}, 500); 
}); 
0

這樣的功能要做到你想要做什麼:

function fadeInRepeat(start, max){ 
    if(start++ < max){ 
     $("#slide" + start).fadeIn(500, function() { 
      fadeInRepeat(start, max); 
     } 
    } 
} 

只需致電fadeInRepeat(1,10)替換您的原始代碼。

0

你可以遞歸。下面是一個簡短的版本:

function slider(count, asc) { 
    var count = count || 1; 
    if (!typeof(asc) == "boolean"||count == 10||count == 1) asc = !asc; 
    $("#slide"+count)[asc?"fadeIn":"fadeOut"](500, (function() { 
     return function() { 
      slider(asc ? ++count : --count, asc); 
     }; 
    })()); 
} 
slider(); 

見這裏:http://jsfiddle.net/K8pbS/1/