2012-09-03 138 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(); 

});