2014-02-16 69 views
0

我知道有很多問題,這個jQuery錯誤是問題所在。但是,您可能會看到,這個錯誤對於解決問題並沒有什麼幫助。我使用jQuery 1.10.2並且在1.3版本中有一個名爲jRumble的插件。jQuery錯誤 - 超出最大調用堆棧大小

現在的錯誤帶有此腳本:

jQuery(document).ready(function() { 
    jQuery('.landing-bar').jrumble({ 
     x: 1, 
     y: 1, 
     rotation: 0 
    }); 

    var rumbleStart = function() { 
     jQuery('.landing-bar').trigger('startRumble'); 
     setTimeout(rumbleStop, 200); 
    }; 

    var rumbleStop = function() { 
     jQuery('.landing-bar').trigger('stopRumble'); 
     setTimeout(rumbleStart, 785); 
    }; 

    rumbleStart(); 
    animateScroll(); 
}); 

function animateScroll() { 
    jQuery('.landing-bar').animate({ 
     width: '100%' 
    }, { 
     duration: 30000, 
     easing: 'linear', 
     complete:function() { 
      jQuery(this).css("width","0%"); 
     } 
    }); 
    animateScroll(); 
} 

什麼是錯我的代碼?我認爲這可能是,一個語法是錯誤的jQuery 1.10 ..

感謝您的任何幫助!

+3

你有一個無限的遞歸發生在'animateScroll' ....你爲什麼要在'animateScroll'裏面調用'animateScroll' –

+0

你有這個小提琴嗎?拋出錯誤時調用什麼方法? – reergymerej

+0

使用'setTimeout(animateScroll,30000)'而不是直接調用animateScroll,或者更好的方式是在動畫已完成回調 –

回答

1

animateScoll()放入您的complete回調中。你不希望它像這樣一遍又一遍地被調用。

function animateScroll() { 
    jQuery('.landing-bar').animate({ 
     width: '100%' 
    }, { 
     duration: 30000, 
     easing: 'linear', 
     complete:function() { 
      jQuery(this).css("width","0%"); 
      animateScroll(); 
     } 
    }); 

} 

說明:

jQuery的回調complete當你的動畫完成時調用。你實質上是在一次又一次地調用animate函數(在前一個調用的毫秒內)並且用永不結束的遞歸函數填充解釋器堆棧。

堆棧看起來像:

animateScroll() 
animateScroll() 
animateScroll() 
animateScroll() 
animateScroll() 
... 

你需要的是:

animateScroll() 
animateScroll() 
complete:function() 
animateScroll() 
complete:function() 
animateScroll() 
complete:function() 
animateScroll() 
... 

,使每個步驟完成一個新的被稱爲前。

相關問題