【问题标题】:Get image slider to auto play获取图像滑块以自动播放
【发布时间】:2011-03-30 16:39:38
【问题描述】:

我正在尝试让我自己的图像滑块以 4000 毫秒的间隔自动播放。我试过使用setTimeout,但我似乎无法让它工作。如果有人可以帮助我,我将不胜感激。这是滑块的示例:

http://www.matthewruddy.com/slider-intervalissue/

有什么办法可以让它自动播放吗?

这里是 jQuery 代码:

$(document).ready(function(){
    var images = $('.slider li');
    var slides = images.length;
    var sliderwidth = 500;
    var currentimage = 0;
    var containerwidth =  sliderwidth*slides;
    var autoplay = 4000;

    $('.slider').css('width', containerwidth);

    $('#next').bind('click',nextimage);

    function nextimage(){
        if(currentimage<slides-1){
            currentimage++;
            $('.slider').animate({left:-sliderwidth*(currentimage)},{duration:800,easing:'easeInOutCubic'});
        }
        else{
            currentimage = 0;
            $('.slider').animate({left:0},{duration:800,easing:'easeInOutCubic'})
        }
    };

});

谢谢, 马修

【问题讨论】:

    标签: jquery image timeout


    【解决方案1】:

    结合使用 setTimeout 和递归,我能够设置运行良好的自动播放。

    我给nextimage() 函数一个参数autoplay,它是一个布尔值。然后我在函数末尾添加了以下行:

    if (autoplay) { setTimeout(function() { nextimage(true); }, 4000); }
    

    最后,我在脚本末尾添加了这一行,让自动播放循环继续进行:

    setTimeout(function() { nextimage(true); }, 4000);
    

    在此处查看演示,主要根据您提供的内容构建,并进行了一些修改以进行自动播放:http://jsfiddle.net/bVjkP/

    简而言之,你将一个布尔值传递给 nextimage() 函数,告诉它是否开始自动播放。然后你只需调用一个初始的 setTimeout 来让球滚动。这个方法的诀窍是你必须通过setTimeout调用一个匿名函数,它调用nextimage函数并将autoplay设置为true,因为你不能在调用带有setTimeout的函数时传递参数。这类似于使用jQuery将函数绑定到点击或悬停等事件的方法。

    【讨论】:

    • 谢谢!您的方法非常有效,但是我仍然有些不理解(无论它们是否有效,我都喜欢理解事物)。为什么你必须写两次?为什么第一行没有; >if (autoplay) { setTimeout(function() { nextimage(true); }, 4000); } 开始自动播放?
    • 该行只会在第一次调用后每 4 秒保持一次函数运行(假设使用 autoplay=true 调用它)。首先,您需要一些东西来启动循环。把它想象成把一个紧身裤推过楼梯的边缘。一旦你启动它,它就会继续运行,但你必须先给它一个初始推动才能让它启动。
    • 好的,我现在明白了!谢谢一百万!
    • 如果您喜欢我的回答,请点赞和/或接受答案吗?谢谢!
    • 嗨安德。只是想指出,当我单击“下一步”按钮时,这会导致计时器的速度减半。但是,我设法自己解决了这个问题。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    相关资源
    最近更新 更多