2015-12-24 33 views
1

我有2門陣列(我是從一個XML文件中讀取):如何在iframe旋轉的URL在JavaScript

  • urls包含的URL
  • durations包含整數表示秒

我想循環訪問這些數組(在達到結尾時再次從0開始)以在iFrame內顯示:

  • urls[0].innerHTMLdurations[0]
  • urls[1].innerHTMLdurations[1]
  • urls[2].innerHTMLdurations[2]

等等

爲了做到這一點,我有以下代碼:

while (i <= len) { 
    $j('.marquee').attr('src',urls[i].innerHTML); 
    setTimeout(function(){ 
     i++; 
     if (i >= len) {i = 0;} 
    },parseInt(duration[i].innerHTML) * 1000); 
} 

我然後reali在達到第一次調用該函數的時間並增加i之前,它會在循環中運行一百萬次。

所以我想只是暫停的代碼,但我很快看到在很多stackoverflow問題,這樣做是一個非常糟糕的主意。

所以問題是,我該怎麼做?

作爲一個額外的問題...我應該在哪些網址的fadeIn()和/或fadeOut()?

+1

你不能使用while循環,因爲setTimeout是異步的... – epascarello

+0

如果沒有很多的URL,你應該加載它們並只顯示一個。 – Hacketo

回答

1

這裏有一個簡單的解決方案:

var i = 0; 
(function step(){ 
    $j('.marquee').attr('src',urls[i].innerHTML); 
    i = (i+1)%len; 
    setTimeout(step, parseInt(duration[i].innerHTML) * 1000); 
})(); 

注意有沒有明確的循環。一次只能編程一次超時。

如果你想添加淡入淡出,你必須加載不同的幀(可能在相同的位置),並淡入淡出。

+0

(我現在必須離開,我不能證明衰落的東西) –

+0

太棒了!我只是將'i =(i + 1)%len'移至'setTimeout'之後。 – dzmr83

+0

不用擔心褪色。我會問一個新問題。謝謝! – dzmr83