2013-11-22 78 views
0

我想用一个for循环 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"> 

我无法弄清楚什么是使一个JavaScript幻灯片制作幻灯片的JavaScript这个代码的问题,它只是连续运行img3而没有循环img1,它也跳过img2从循环

+1

好的。你现在的代码是这样的:当文档被加载时,它调用一个函数,每秒调用一个函数。在该函数中,您从0到Image_slide的长度计数。计数完成后,您分配一个图像。因为您在for循环之后执行此操作,所以变量i将始终为3。 – some

回答

4

解决这个问题比使用for循环更好的选择是简化y全部跳过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/

现在,说,这个问题实际上是问如何使它与工作的循环。我写了一个潜在的解决方案(未经测试,所以我不能保证它会工作),但我强烈建议不要这样做。它总体上不应该太糟糕,它要复杂得多,上面的解决方案如此简单,这个解决方案真的不值得。

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()中更新的代码初始化一个延迟变量和一个启动变量。当循环运行一次时,它会自动激活启动并始终设置源中的第一个值。

一旦开始设置,每连续一次它将递增延迟变量,直到延迟命中1000,并且它将递减i变量,以便for循环不会使i递增(cap)(数组长度)。基本上,它将i设置为1,以便for的增量回到它应该在的位置,从而阻止它继续移动到下一个变量,直到它最终处理当前条目。

理论上这应该起作用。尽管你可能需要大幅增加延迟;千分之一实际上不应该等于一秒;它可能会比这更快。但我可能错了;它可能会在一秒钟内运行,我还没有机会尝试它。

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

+0

嘿。到达几乎相同的例子,所以只需添加我的jsFiddle链接。随意编辑或删除它。 –

+0

jsFiddle示例很好。我应该自己开始使用它,真的。 – JaidynReiman

+0

@Tieson T 我知道你的代码之前,我知道它会工作,但我想通过循环访问数组(图片) – mirsahib