2013-11-22 77 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