2017-01-12 64 views
0

我有一個功能change_background(),我打電話document.onload通過setInterval(change_background(), 5000);改變我的標題的背景每5秒的。JS:我可以在通過setInterval()調用的函數()中增加一個var嗎?

我寫在哪裏我的功能是: 如何在每次調用它時增加我的num var?

function change_background(){ 

    var element = document.getElementsByClassName('top'); 
    element[0].style.backgroundImage = 'url("media/image' + num + '.jpg")'; 

//when num gets greater than the amount of images 
if(num > 2){ 
    num = 0; 
} 

}//end change_background() 

我只是試圖達到這個效果。這是甚至可能的方式,我正在做這件事,我會採取錯誤的方式嗎?

+0

作爲一個注意你的代碼:'的setInterval(change_background(),5000);'應該是'的setInterval(change_background,5000);'只要你想'setInterval'調用你的函數'change_background'每隔X毫秒。 – Sgnl

+0

可能是一個想法,嘗試並獲得圖像緩存以及改變之前 - 也閱讀js變量範圍可能是有益的 - http://stackoverflow.com/a/500459/5302749有一些很好的信息 – Brian

回答

1

試試這個:

var num = 0; // declaration 
function change_background(){ 

    var element = document.getElementsByClassName('top'); 
    element[0].style.backgroundImage = 'url("media/image' + num + '.jpg")'; 
    num++; 
    //when num gets greater than the amount of images 
    if(num > 2){ 
    num = 0; 
    } 

}//end change_background() 
0

是的。有可能的。你可以讓它增加你的數量。

element[0].style.backgroundImage = 'url("media/image' + (num++) + '.jpg")'; 
0

是的,它可以,但變量應該是在相同的情況下比setInterval的,是這樣的:

b = {a :1}; setTimeout(function(){ b.a++; console.log(b)}, 1000) 
如果你想打電話

一個函數,那麼num需要是全局的,這個函數將可用於訪問該變量。

incrementB無法訪問這將失敗的變量b

function incrementB() { return b++; } 
function someFunc() { var b = 3; } 
setInterval(incrementB, 500); 

這工作,因爲b爲全球(但要儘量避免這種情況):

var b = 0; 
function incrementB() { return b++; } 
function setValueToB() { b = 3; } 
setInterval(incrementB, 500); 
0

這將是我的嘗試爲我喜歡避免全局變量。這使得計數器num處於閉合狀態,其可由change_background返回的功能訪問。

function change_background(){ 
    let num = 0; 

    return function() { 
    var element = document.getElementsByClassName('top'); 
    element[0].style.backgroundImage = 'url("media/image' + num + '.jpg")'; 

    num += 1; // or num++ or whatever sauce you like 

    //when num gets greater than the amount of images 
    if(num > 2){ 
     num = 0; 
    } 
    } 
} 

setInterval(change_background(), 5000); 
相關問題