0

我在jQuery中創建了一個fadeIn/fadeOut輪播,並且它在所有符合標準的瀏覽器中都正常工作,除了IE 9在Internet Explorer中執行兩次JavaScript/jQuery時間間隔

轉盤設爲滾動到下一個項目使用setInterval 15000毫秒,它也使用window.addEventListener重點窗外時暫停。當我在Internet Explorer 9中測試它時,我注意到每次執行的時間間隔都是兩次,所以不是切換到下一個項目然後等待15秒鐘(就像在其他瀏覽器中發生的那樣),它會翻轉兩次在等待下一個時間間隔之前的項目。

該代碼可能過長,但該頁面本身位於http://www.stefanvignir.de/,JavaScript文件位於http://www.stefanvignir.de/carousel.js

我該怎麼做才能在IE9中正常工作,並且有什麼我應該避免適應JavaScript到IE瀏覽器?

+0

它在Firefox 5.01中也是如此。在你的代碼中也可能會有一些模棱兩可的部分。 – FK82

回答

2

我想你的焦點監聽器在一切都開始時會被調用。你可以嘗試檢查,如果你有一個carouselIntervalId啓動計時器前:

if(!carouselIntervalId) 
    carouselIntervalId = setInterval(...); 

而且,由於我們都是正確偏執這裏,把那張支票前兩個setInterval電話。

if(carouselIntervalId) 
    clearInterval(carouselIntervalId); 
carouselIntervalId = null; 

你會想,當然所有clearInterval身邊召喚上面:

然後,當你停止計時器你想抵消carouselIntervalId。 (?)

此外,雖然我的關注,我注意到,你有兩個不同的setInterval電話:

setInterval(function() { carouselNext() }, 15000); 
// And later... 
setInterval(function() { if (animate == true) { carouselNext() } }, 15000); 

您可能希望使它們相同,以避免混亂和錯誤。

+2

我可以在IE調試器中驗證代碼在啓動時設置了兩個間隔定時器 - 一個在初始化中,另一個在初始焦點事件中。如果一個人已經在跑步了,那麼解決辦法就是說mu不要設置一個新的時間間隔。 – jfriend00

+0

@ jfriend00:謝謝,我不想拖出我的IE測試裝備。檢查'carouselIntervalId'的 –

+0

似乎已經做到了。它在某種程度上卡住了我的想法,即爲'carouselIntervalId'設置一個新的值將簡單地刪除舊的時間間隔並用新的時間間隔替換它。 – aldavigdis