解決這個問題比使用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到Image_slide的長度計數。計數完成後,您分配一個圖像。因爲您在for循環之後執行此操作,所以變量i將始終爲3。 – some