2017-10-21 124 views
2

短故事我想從圖像數組中每4秒更改一次圖像。我需要在這裏添加什麼來實現這一點。Js:循環通過陣列indeffinetly

var list = ["img1", "img2", "img3"]; 

function ChangeBackground() { 
    document.getElementById('background').src = "images/"+list[i]; 
} 

window.setInterval(ChangeBackground(), 4000); 

回答

4

您可以在索引上使用閉包。

function changeBackground() { 
 
    var i = 0, 
 
     imgURL = 'http://lorempixel.com/250/200/abstract/'; 
 
    return function() { 
 
     document.getElementById('background').src = imgURL + list[i++]; 
 
     i %= list.length; // prevent looping over the length 
 
    }; 
 
} 
 

 
var list = [3, 1, 4, 7]; 
 

 
setInterval(changeBackground(), 4000); 
 
//       ^^   with brackets for returning function
<img id="background">

0

嘗試:

var list = ["img1", "img2", "img3"]; 
var i=0; 
function ChangeBackground() { 
    i++; 
    if(i>list.length-1){ 
     i=0; 
    } 
    document.getElementById('background').src = "images/"+list[i]; 
} 

window.setInterval(ChangeBackground(), 4000); 

注意這並污染命名空間。

0
var list = ["img1", "img2", "img3"], 
    i = 0;               // declare and initialize i outside of the function 

function ChangeBackground() { 
    document.getElementById('background').src = "images/" + list[i]; 
    i = (i + 1) % list.length;          // increment i after each call to this function (make sure i come back to 0 if it exceeds the length of the array using the modulo % operator) 
} 

window.setInterval(ChangeBackground, 4000);       // pass a reference to the function not its return value (notice there is no parens after the function name) 
+0

謝謝!這回答了我想知道的一切^^ – 888666111