Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用for循环制作javascript幻灯片_Javascript_Html - Fatal编程技术网

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

如何使用for循环制作javascript幻灯片,javascript,html,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 <

我想使用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;
var Image_slide=新数组(“img1.jpg”、“img2.jpg”、“img3.jpg”);//图像容器
var Img_Lenght=图像_slide.length;//集装箱长度-1
函数幻灯片(){
对于(变量i=0;i
html代码

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


我不知道这段代码有什么问题,它只是连续运行img3而不循环img1,它还从循环中跳过img2。解决这个问题的更好方法是直接跳过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秒。我觉得一秒钟有点太快了

下面是一个关于JSFIDLE的正确解决方案的示例:

也就是说,现在的问题实际上是问如何使它与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;
var Image_slide=新数组(“img1.jpg”、“img2.jpg”、“img3.jpg”);//图像容器
var Img_Length=Image_slide.Length;//集装箱长度-1
函数幻灯片(){
延迟=0;
开始=错误;
对于(变量i=0;i
我不能保证这会起作用,但本质上,我在slide()中更新的代码初始化了一个延迟变量和一个启动变量。当循环运行一次时,它会自动激活start并始终设置源中的第一个值

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

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


显然,这一点的复杂性相当高,只是不值得。应该使用我的第一个选项。

解决这个问题比使用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秒。我觉得一秒钟有点太快了

下面是一个关于JSFIDLE的正确解决方案的示例:

也就是说,现在的问题实际上是问如何使它与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;
var Image_slide=新数组(“img1.jpg”、“img2.jpg”、“img3.jpg”);//图像容器
var Img_Length=Image_slide.Length;//集装箱长度-1
函数幻灯片(){
延迟=0;
开始=错误;
对于(变量i=0;i
我不能保证这会起作用,但本质上,我在slide()中更新的代码初始化了一个延迟变量和一个启动变量。当循环运行一次时,它会自动激活start并始终设置源中的第一个值

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

理论上,这应该是可行的。您可能需要增加