如何无限循环jQuery画廊

时间:2013-08-26 22:45:50

标签: javascript jquery html slideshow jsfiddle

我使用jQuery创建了一个图像幻灯片,其中5个图像在25秒的间隔内一个接一个地出现。每个图像在淡出之前保持5秒钟,然后下一个图像淡入 幻灯片播放工作正常但我希望永久循环 最后图片淡出后,它应该 重新启动来自第一张图片的动画 我尝试使用setInterval,但无法成功。这是我编写的幻灯片的工作示例:

JSfiddle

这是完整的代码:

HTML:

<img id="img1" src="http://njballroomdancecenter.com/wp-content/uploads/2013/08/1500x1000.jpg" style="display: block; width: 50%; position: absolute;" />
<img id="img2" src="http://njballroomdancecenter.com/wp-content/uploads/2013/08/1500x1000-1.jpg" style="display: block; width: 50%; position: absolute;" />
<img id="img3" src="http://njballroomdancecenter.com/wp-content/uploads/2013/08/1500x1000-2.jpg" style="display: block; width: 50%; position: absolute;" />
<img id="img4" src="http://njballroomdancecenter.com/wp-content/uploads/2013/08/1500x1000-3.jpg" style="display: block; width: 50%; position: absolute;" />
<img id="img5" src="http://njballroomdancecenter.com/wp-content/uploads/2013/08/1500x1000-4.jpg" style="display: block; width: 50%; position: absolute;" />

使用Javascript:

$(document).ready(function(){
    $("#img2,#img3,#img4,#img5").hide();
    setTimeout(function(){
        $("#img1").fadeOut("slow", function () {});
    }, 5000);
    setTimeout(function(){
        $("#img2").fadeIn("slow", function () {});
    }, 5000);    
    setTimeout(function(){
        $("#img2").fadeOut("slow", function () {});
    }, 10000); 
    setTimeout(function(){
        $("#img3").fadeIn("slow", function () {});
    }, 10000);
    setTimeout(function(){
        $("#img3").fadeOut("slow", function () {});
    }, 15000); 
    setTimeout(function(){
        $("#img4").fadeIn("slow", function () {});
    }, 15000);
    setTimeout(function(){
        $("#img4").fadeOut("slow", function () {});
    }, 20000);
    setTimeout(function(){
        $("#img5").fadeIn("slow", function () {});
    }, 20000);
    setTimeout(function(){
        $("#img5").fadeOut("slow", function () {});
    }, 25000);
});  

4 个答案:

答案 0 :(得分:7)

jQuery(function( $ ){             // DOM ready shorthand
    
    // ::: Fade Gallery: http://stackoverflow.com/a/18454450/383904
    var $gal = $("#gallery"),
        $img = $gal.find(">*"),
        n = $img.length,          // number of images
        c = 0,                    // counter
        itv;                      // loop interval       
   
    function anim(){ $img.fadeOut().eq( ++c % n ).stop().fadeIn(); }
    function loop(){ itv = setInterval(anim, 3000); }
    function stop(){ clearInterval( itv ); }
    
    $img.hide().eq(c).show();     // Begin with `c` indexed image
    $gal.hover( stop, loop );     // Pause gallery on hover
    loop();                       // START!
    
});
#gallery     { position:relative; }
#gallery img { position:absolute; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
(Hover to pause gallery)<br>
<div id="gallery">
    <img src="//placehold.it/200x130/993/fff?text=1" />
    <img src="//placehold.it/200x130/379/fff?text=2" />
    <img src="//placehold.it/200x130/973/fff?text=3" />
    <img src="//placehold.it/200x130/739/fff?text=4" />
    <img src="//placehold.it/200x130/793/fff?text=5" />
</div>

答案 1 :(得分:2)

在函数中执行一个循环。让函数在setTimeout之后调用自己。它应该永远运行。您可能需要一些数组逻辑来循环遍历图片。像这样:

function go(i) {
  setTimeout(function(){
    $('#img'+i).fadeOut(5000);
    if (i<6) i=1;    
    else i++;
    go(i);
  },5000);
}
go(1);

答案 2 :(得分:1)

这样做的一种方法可以通过标准的javascript来解决,正如ntgCleaner通过setInterval(function, time)函数在评论中建议的那样。

在伪代码中,人们可以这样表达:

function wrapper() {
   allYourCode()
}

setInterval(wrapper, 90000) // running the function wrapper every 1,5 minute.

答案 3 :(得分:1)

我喜欢runfaj的解决方案,但是为了完成,这里是一个setInterval(..)解决方案。当setInterval超时应该执行时,使用setTimeout正确同步。示例代码段with a jsfiddle

var singleImageDisplayTime = 5000;
var completeLoopTime = 5 * singleImageDisplayTime;

function fadeInFunction(jquerySelector) {
    $(jquerySelector).fadeIn("slow", function () {});
}
function fadeOutFunction(jquerySelector) {
    $(jquerySelector).fadeOut("slow", function () {});
}
...
setTimeout(function () {
    fadeInFunction("#img1");
    setInterval(function() { fadeInFunction("#img1"); }, completeLoopTime);
}, 5 * singleImageDisplayTime);
setTimeout(function () {
    fadeOutFunction("#img1");
    setInterval(function() { fadeOutFunction("#img1"); }, completeLoopTime);
}, 1 * singleImageDisplayTime);
...