使用 setInterval 暂停 JQuery 的幻灯片放映?

Using setInterval to pause a slideshow with JQuery?

首先,我想说我对 JS/JQuery 很陌生。

我正在尝试制作带有暂停和播放按钮的背景图片幻灯片。

我想出了如何使用 clearInterval 暂停它,但是我一辈子都想不出如何让它从暂停的地方再次恢复。我知道有几个线程与此有关,但我无法让它们与幻灯片放映一起工作。

代码如下:

$(document).ready(function(){
var count = 0;
var images = ["img1.jpg","img2.jpg","img3.jpg","img4.jpg"];
var image = $(".fader");
var timer = false;


image.css("background-image","url("+images[3]+")");

var timer = setInterval(function(){
    image.fadeOut(500, function(){
        image.css("background-image","url("+images[count++]+")");
        image.fadeIn(500);
    });
    if(count==images.length){
        count = 0;
    }
},1000);

$("#pauseButton").click(function(){
    clearInterval(timer);
 });

 $("#startButton").click(function(){
     setInterval(timer);
});

});

提前致谢。

基本上,您可以使 "next slide" 函数可重复使用,然后在需要开始幻灯片放映时使用它,无论是初次开始还是稍后重新开始。

但是将各种逻辑位放在离散的、命名良好的函数中可以帮助代码更轻松地流动并且更简单 read/maintain,这里有一些建议(标记为 ***):

$(document).ready(function() {
    var count = 0;
    var images = ["img1.jpg", "img2.jpg", "img3.jpg", "img4.jpg"];
    var image = $(".fader");
    var timer = 0; // *** Timer handles are numbers. `false` works, but...

    // *** Reusable function to target with `setInterval`
    function nextSlide() {
        image.fadeOut(500, function() {
            image.css("background-image", "url(" + images[count] + ")"); // *** Removed increment here, see below
            image.fadeIn(500);
        });
        count = (count + 1) % images.length; // *** Easy way to do roll-around
    }

    // *** Reusable "start" function
    function startSlideShow() {
        if (!timer) { // *** Don't try to start it if already running
            timer = setInterval(nextSlide, 1000);
        }
    }

    // *** Reusable "stop" function
    function stopSlideShow() {
        clearInterval(timer); // *** Safe to call with `0`, so no need to branch
        timer = 0;
    }

    // *** Stop when pause button clicked
    $("#pauseButton").click(stopSlideShow);

    // *** (Re)Start when pause button clicked
    $("#startButton").click(startSlideShow);

    // *** Start the slideshow automatically
    image.css("background-image", "url(" + images[3] + ")");
    startSlideShow();
});