如何使用for循环制作javascript幻灯片

时间:2013-11-22 04:48:48

标签: javascript html

我想使用for循环制作javascript幻灯片 Javascript代码

        var Image_slide = new Array("img1.jpg", "img2.jpg", "img3.jpg");// image container
    var Img_Lenght = Image_slide.length; // container length - 1

    function slide(){
        for (var i = 0; i < Img_Lenght; i++) {

        Image_slide[i];

        };
        document.slideshow.src = Image_slide[i];
    }
    function auto(){
        setInterval("slide()", 1000);
    }

    window.onload = auto;

html代码

<img src="img1.jpg" name="slideshow">

我无法弄清楚这个代码的问题是什么它只是在没有循环img1的情况下连续运行img3而且它也从循环中跳过img2

1 个答案:

答案 0 :(得分:4)

解决这个问题比使用for循环更好的选择是简单地跳过for循环。使用for循环实在太复杂了,而且解决方案简单得多。

不是使用for循环,只需直接指定幻灯片并跟踪定位:

var Image_slide = new Array("img1.jpg", "img2.jpg", "img3.jpg");// image container
var Img_Length  = Image_slide.length; // container length - 1
var Img_current = 0

function slide() {
    if(Img_current >= Img_Length) {
        Img_current = 0;
    }
    document.slideshow.src = Image_slide[Img_current];
    Img_current++;
}
function auto(){
    setInterval(slide, 1000);
}
window.onload = auto;

间隔应该已经运行了。汽车内部的循环是多余的,只是搞砸了它。您每次只需要获取一个数组元素,而不是整个循环。每次循环只会返回最后的结果。

您需要跟踪您的位置,并在达到最大长度后将位置重置为0.

我还建议间隔至少3秒而不是1秒。我觉得有一秒太快了。

以下是JSFiddle上正确解决方案的示例:http://jsfiddle.net/LUX9P/

现在,那就是说,问题实际上是在询问如何使用for循环。我已经为这个问题写了一个潜在的解决方案(未经测试,所以我不能保证它会起作用),但我强烈建议不要这样做。它总体上不应该太糟糕,它的复杂程度要高得多,而且上面的解决方案很简单,这个解决方案真的不值得。

var Image_slide = new Array("img1.jpg", "img2.jpg", "img3.jpg");// image container
var Img_Length = Image_slide.length; // container length - 1

function slide(){
    delay = 0;
    start = false;
    for (var i = 0; i < Img_Length; i++) {
        if(start && delay < 1000) {
            delay += 1;
            i--;
        }
        else {
            document.slideshow.src = Image_slide[i];
            delay = 0;
        }
        start = true;
    }
}
function auto(){
    setInterval("slide()", 1000);
}

window.onload = auto;

我不能保证这会起作用,但实际上,我在slide()中更新的代码初始化了一个延迟变量和一个起始变量。当循环运行一次时,它会自动激活start并始终在源中设置第一个值。

一旦设置了start,每隔一段时间它就会递增延迟变量,直到延迟达到1000,并且它会减小i变量,这样for循环不会增加i超过cap(数组的长度) 。基本上,它将i设置为1,以便for的增量将其放回到应该的位置,防止它移动到下一个变量,直到它最终处理当前条目。

理论上,这应该起作用。您可能需要显着增加延迟; 1000不应该实际等于一秒;它可能比这快得多。但我可能弄错了;它可能在一秒钟内运行,我还没有机会尝试它。

显然,这种复杂性非常高,不值得。我应该使用我的第一个选项。