2010-06-21 84 views
0

我在我的web應用程序中有六個菜單選項,當用戶將鼠標懸停在鏈接上時(ul> li> a),我切換圖像以顯示上下文相關的照片,並淡化圖像進出。但是,我注意到,當用戶在鏈接之間快速移動鼠標時,隊列無法正常處理,用戶通常會懸停在鏈接上並顯示前一個懸停的舊圖像。經過一番閱讀後,似乎正確的做法是使用stop()方法,但是當我嘗試並實現它時,ie6報告堆棧溢出。jquery停止方法導致ie6堆棧溢出

這是我的舊代碼(其中有老人形象的問題):

if(webImage != 'img/template/slide_web.png') { 
         $('#slide img').fadeOut(function() { 
          $(this).load(function() {$(this).fadeIn(); }); 
          $(this).attr('src','img/template/slide_web.png'); 
         }); 

這是我的新代碼(它解決了老問題,但會導致IE6堆疊在第一行溢出):

if(webImage != 'img/template/slide_web.png') { 
         $('#slide img').stop(true, true).fadeOut(function() { 
          $(this).load(function() {$(this).stop(true, true).fadeIn(); }); 
          $(this).attr('src','img/template/slide_web.png'); 
         }); 

我正在實施stop()方法嗎?或者有另外一種方法可以避免jQuery淡入淡出隊列丟失嗎?

回答

0

的問題是這一行:

$(this).load(function() {$(this).stop(true, true).fadeIn(); }); 

要綁定一個​​處理程序(雖然功能相同)每個一次你淡出,所以你需要或者將它綁定一次,這個範圍之外,或.unbind(),就像這樣:

$(this).unbind('load').load(function() {$(this).stop(true, true).fadeIn(); }); 

不這樣做,它試圖一次全部運行那些負載處理程序,一些它不能手le,實際上,它正在連續執行.stop(true, true).fadeIn()很多次。

+0

謝謝,這使得事情更穩定一些,但是現在當我通過啓動另一個圖像來中斷一個圖像的褪色時,現在我在ie6中發生了堆棧溢出。這讓我回想起關於stop()函數的想法。 – Nick 2010-06-21 13:40:52

+0

現在我剛剛用這個插件替換了我的代碼,工作正常:) http://www.hieu.co.uk/blog/index.php/imageswitch/ – Nick 2010-06-21 14:09:55

+0

@Nick - (嗨其他尼克!)它取決於在效果上,但我認爲在這種情況下你會想'.stop(true)',而不是嘗試先完成當前動畫,這是第二個參數的作用:) – 2010-06-21 14:50:13