2013-03-17 93 views
3

我試圖在我的網站上顯示/隱藏贊助商徽標,無休止地顯示/隱藏一個接一個。我覺得我有點兒接近了,但是在敲了敲頭之後,我決定是時候尋求幫助了。這裏是我的代碼:Javascript/JQuery通過數組值循環

var sponsors = ["prointec","pequigraf"]; 
for (var i = 0; i < sponsors.length; i++){ 
    setTimeout($(document.getElementById(sponsors[i])).slideToggle("slow", "swing"), 1000); 
    setTimeout($(document.getElementById(sponsors[i])).slideToggle("slow", "swing"), 10000 * (i + 1)); 
} 

基本上,它應該顯示一個後另一個(10秒後),而是一次運行。任何提示?提前致謝!

+2

爲什麼人們downvoting這個問題?如果您對閱讀/回答初學者的東西感到不舒服,請忽略它。看起來像在SO的一些人看到新手問題作爲專門撲的遊樂場。 – 2013-03-17 03:37:49

+0

爲了防止任何人想要檢查它的外觀(或者如果有人想使用這個簡單而有效的代碼),下面是它的實現(它是英雄圖像下方的黑色條):http://www.oficiografico。 com/ – 2013-03-17 13:46:44

回答

1

您需要給超時一個函數引用。你也應該嵌套你的超時。嘗試在編寫JavaScript時異步思考。

我還沒有測試過這個,但這是我想出來的。還要注意的是十秒10,000毫秒,而不是1000

var sponsors = ["prointec","pequigraf"]; 

var i = 0; 

$(document.getElementById(sponsors[0])).show(); 
$(document.getElementById(sponsors[1])).hide(); 

var toggleSponsor = function() { 
    $(document.getElementById(sponsors[i])).hide(); 

    i = (i + 1) % sponsors.length; 
    $(document.getElementById(sponsors[i])).show(); 

    setTimeout(toggleSponsor, 10000); 
}; 

setTimeout(toggleSponsor, 10000); 
+0

這很整潔!像魅力一樣工作!非常感謝! – 2013-03-17 03:37:10

+0

不客氣。如果您希望我解釋代碼的任何部分,請問一下。 – rpamely 2013-03-17 03:39:22

2

我張貼此作爲一個答案,而不是評論只是爲了確保我可以做一些適當的代碼格式。

rpamely的代碼看起來像你所需要的,但你可以簡化它很多。只需用'#'加前綴你的兩個贊助商ID,你可以刪除所有的document.getElementById()電話:

var sponsors = [ "#prointec","#pequigraf" ]; 

var i = 0; 

$(sponsors[0]).show(); 
$(sponsors[1]).hide(); 

var toggleSponsor = function() { 
    $(sponsors[i]).hide(); 

    i = (i + 1) % sponsors.length; 
    $(sponsors[i]).show(); 

    setTimeout(toggleSponsor, 10000); 
}; 

setTimeout(toggleSponsor, 10000); 
+0

謝謝Michael! – 2013-03-17 04:02:02