2011-10-06 35 views
2

我正在使用setTimeout()在我的網站上用橫幅做一種「幻燈片放映」。一切工作正常,我有延遲設置爲10秒。只有當我切換窗口/選項卡並執行其他操作時纔會出現此問題。當我回來時,這個函數運行了很多次(我假設)趕上了什麼。問題是,我的屏幕一遍又一遍閃爍,顯示所有橫幅淡入淡出。當窗口沒有關注時,setTimeout()是否有問題?

解決方案的任何想法?我在Google Chrome中注意到了這一點,我也知道它發生在Firefox中。不確定關於IE。

編輯

這是我處理的片段。不幸的是,它是一個非常大的腳本的一部分,並連接到一個非常複雜的HTML文件。

我希望你能得到什麼是怎麼回事至少一個想法:

var lval=0; 
var nval=1; 
setHead = function(data) { 
     lval=nval; 
     var index=1; 
     $.each(data, function(name,value) { 
      if (Math.floor(Math.random()*index+2)==index+1) { 
       nval=index; 
      } 
      if (index==lval) { 
       $('.headmaster').find('img').fadeOut('fast'); 
       //$('.headmaster').css('background-color',value.backgroundcolor); 
       $('.headmaster').find('a').attr('href',value.url); 
       $('.headmaster').animate({backgroundColor:value.backgroundcolor},'slow',function() { 
        $('.headmaster').find('img').attr('src',value.img);  
        $('.headmaster').find('img').fadeIn('slow');                   
       }); 
      } 
      index++; 
     }); 
     setTimeout(function() { setHead(data); },10000); 
} 

arrayGet = function(arr,idx) { 
    $.each(arr, function(i,v) { 
     if (i==idx) { 
      return v  
     } 
    }); 
    return null 
} 

$(document).ready(function() { 
    $.getJSON('json/intros.json', setHead); 
}); 

我使用jQuery的動畫和褪色的顏色顏色插件。

+0

您是否檢查過螢火蟲,以查看您的setTimeout函數正在發生多少個調用?嘗試檢查一下正常情況,並在您更改標籤/窗口後。看看你的函數調用是否有異常。 – AdrianoRR

+0

@AdrianoRR我已經確定了。一旦標籤切換回來,該函數被稱爲'timegone/timeoutlength'次。 – FreeSnow

+1

好的,你能提供我們的代碼片段或使用你的功能一些例子嗎?識別你的問題會更容易。 – AdrianoRR

回答

3

發生這種情況可能是因爲您使用的是舊版本的jQuery。即開發團隊已經開始使用​​API。幸運的是,他們將其固定在1.6.3。下面是從他們的blog的摘錄:

沒有更多的動畫「蟲洞」:我們必須爲瀏覽器的API​​寄予厚望的時候,我們增加了支持到版本1.6 。然而,自那時以來,我們收到的投訴量最大的投訴之一涉及​​當標籤 不可見時的行爲方式。當選項卡不可見時啓動的所有動畫「堆疊」 並且在選項卡重新對焦之前不會執行。 然後他們都以經線速度動畫!我們已經刪除了對這個 API的支持(這對您調用jQuery的動畫 功能的方式沒有影響),並計劃將其合併到未來版本的jQuery中。

只需更新至1.6.4

+0

哦完美!我意識到我在本地文件系統上引用了一箇舊副本進行測試。完美;) – FreeSnow