2012-09-03 178 views
2

我做了一個jQuery腳本,使幻燈片顯示兩個div元素。 這裏是代碼如何讓jquery腳本重新啓動?

$(document).ready(function(){ 
    $("div#slide2").hide(); 
    $("div#slide1").show().delay(5000).fadeOut(1500,function(){ 
    $("div#slide2").fadeIn(1500).show().delay(5000).fadeOut(1500) 
    }); 
}); 

現在我的問題。如何讓這個腳本在每次完成時重新啓動?

+0

這不是回答你的問題,但如果你只是通過一些圖片的嘗試循環使用jQuery插件[循環](http://jquery.malsup.com/cycle/)。 – Boyye

回答

2

創建一個函數foo,並將其設置爲最後一個動畫的回調。

$(document).ready(function(){ 
    $("div#slide2").hide(); 
    (function foo() { 
     $("div#slide1").show().delay(5000).fadeOut(1500,function(){ 
      $("div#slide2").fadeIn(1500).show().delay(5000).fadeOut(1500, foo); 
     }); 
    }()); 
}); 
+1

+1,你的解決方案效果會好得多,因爲在這個例子中時機很重要。'http:// jsfiddle.net/FranWahl/cNRW3 /'我試過'setInterval()',時機剛剛關閉。做得好。 – Nope

+0

非常感謝,它的工作原理與我想要的完全一樣! – user1644062

1

您可以創建一個無限遞歸函數,該函數在動畫完成時調用自身。

function animation() { 
    $("div#slide2").hide(); 
    $("div#slide1").show().delay(5000).fadeOut(1500,function(){ 
     $("div#slide2").fadeIn(1500).show().delay(5000).fadeOut(1500, function() { 
      animation(); 
     }); 
    }); 
} 

然後調用它的document.ready內:

$(document).ready(function() { animation(); }); 
0

您可以使用setTimeout

function foo() 
{ 
    $("div#slide2").hide(); 
    $("div#slide1").show().delay(5000).fadeOut(1500,function() 
    { 
     $("div#slide2").fadeIn(1500).show().delay(5000).fadeOut(1500); 
    }); 

    setTimeout(foo, 0); 
} 

$(document).ready(function() 
{ 
    foo(); 
}); 
0

你應該把你的代碼的功能,然後調用此函數它的後完成。

$(document).ready(function(){ 

    slideshow(); 


    function slideshow(){ 
     $("div#slide2").hide(); 
     $("div#slide1").show().delay(5000).fadeOut(1500,function(){ 
      $("div#slide2").fadeIn(1500).show().delay(5000).fadeOut(1500,function(){ 
       slideshow(); 
      }); 
     }); 
    } 
}); 

這裏是演示on the jsfiddle

0

試試這個:

var repeat = function(time) { 

    var 
     refForStop = true, 
     fnrepeat = function() { 
      $("div#slide2").hide(); 
      $("div#slide1").show().delay(5000).fadeOut(1500,function(){ 
      $("div#slide2").fadeIn(1500).show().delay(5000).fadeOut(1500) 
      }); 

      if (refForStop) { 
      setTimeout(fnrepeat, time || 1000); 
      } 
     }; 

    fnrepeat(); 
    return function() { refForStop = false; }; 
}; 


$(document).ready(function(){ 

    var fnStop = repeat(); 
    //run function for stop: fnStop(); 

});