2014-03-30 76 views
2

我正在爲WordPress網站創建圖像滑塊。它只起到部分作用,它按預期呈現「顯示」和「隱藏」行爲,但不會切換div的「background-image」CSS屬性。jQuery圖像滑塊 - 奇怪的行爲

指向圖像的鏈接位於數組中,變量計數器在該數組的所有索引之間切換。使用「alert()」我可以確定它工作的很好(所有操作都可以正確執行),但似乎工作得太快而導致溢出。我不確定它是否在每次運行時都按正確的順序執行操作。請問你能幫幫我嗎?

這是我從控制檯得到了錯誤:

Uncaught RangeError: Maximum call stack size exceeded 

,這是我的滑代碼:

jQuery(document).ready(function($) { 
    var imgArray = []; 
    imgArray.push("url(/projekty/sklep/wp-content/themes/maxshop/images/rotate/drugi.jpg)"); 
    imgArray.push("url(/projekty/sklep/wp-content/themes/maxshop/images/rotate/trzeci.jpg)"); 
    imgArray.push("url(/projekty/sklep/wp-content/themes/maxshop/images/rotate/czwarty.jpg)"); 
    imgArray.push("url(/projekty/sklep/wp-content/themes/maxshop/images/rotate/piaty.jpg)"); 
    var i = 0; 
    myWay(imgArray, i); 


    function myWay(theArray, number) { 
     $('#left-title-bar').show(500).delay(7000); 
     $('#left-title-bar').css("background",""+ theArray[number] + ""); 
     $('#left-title-bar').hide(500); 
     if (number==3) { 
      number = 0; 
     } else { 
      number = number+1; 
     } 
     myWay(theArray, number); 
    } 
}); 
+0

你有一個無限循環之前改變。你的函數myWay調用它自己。這會導致JavaScript中的問題。 –

+0

那麼我怎樣才能反覆調用它不會導致溢出?我希望我的代碼能夠連續切換圖像。 –

回答

1

您的問題是,你使用遞歸沒有條件終止, 在你的情況下,你不應該使用遞歸,而是嘗試使用setInterval(functionName, milliseconds)來代替。 的setInterval會調用functionName一次milliseconds

function myWay() { // make n and theArray in the outer scope of the function 
    $('#left-title-bar').hide(500,function(){ 
     $('#left-title-bar').css("background",""+ theArray[number] + ""); 
     $('#left-title-bar').show(500); 
     if (number==3) { 
      number = 0; 
     } else { 
      number = number+1; 
     } 

    }); //delay will not pause the code 
} 
setInterval(myway,2000) //will run myway once each 2 seconds 

編輯:等待畫面改變它

+0

你很好,謝謝。我唯一留下的問題是圖像交換完成,而圖像仍然可見。我希望JavaScript在圖像「隱藏」後執行它。有沒有簡單的解決方法? –

+0

使用回撥功能 編輯代碼來反映這 –

+0

謝謝。我很感激幫助,可悲的是,我的名聲太低,不足以將您的答案標記爲有用。我會盡快做到這一點,只要我得到15分代表。 –