2012-04-23 74 views
1
$(document).ready(function() { 
    $("ul li").click(function() { 
     $(this).find("p").slideToggle("normal"); 
     return false; 
    }); 
}); 

有了這片jQuery代碼,我可以使元素滑入和滑出。但問題是,當有人點擊真實快速時,滑出將只會到達最大到達高度的最大高度。slideToggle問題停止()

因此,如果有人點擊真實快速的元素將只滑出幾個像素,並向後滑動。如果他們再次點擊滑出,它只會滑出最後一次達到的最大高度。

任何人都可以幫助我解決這個問題,使這項工作適當?

PS:p元素的高度設置爲自動,所以它自動匹配裏面的內容的高度(也許這個細節會幫助你的答案)。

回答

0

試試這個:

$(document).ready(function() { 
    $("ul li").click(function() { 
     if (! $(this).find('p:animated').length) 
     { 
      $(this).find("p").slideToggle("normal"); 
      return false; 
     } 
    }); 
}); 
1

除了使用click功能附加click事件的,使用one代替:

$("ul li").one("click", doStuff); 

function doStuff(){ 
    // do your stuff here 
    $("ul li").one("click", doStuff); // Re-attach event 
} 

,然後在功能重新連接的事件。

0

如果要真正處理額外的點擊(而不是忽略它們),那麼要使用.stop(true, true)停止以前的動畫,它跳到結論,以便下次動畫可以運行,只要你想:

$(document).ready(function() { 
    $("ul li").click(function() { 
     $(this).find("p").stop(true, true).slideToggle("normal"); 
     return false; 
    }); 
}); 

每當你從用戶點擊觸發動畫,你應該知道.stop()並找出你想用它來使用的特定情況下它的參數。沒有它,動畫可能會堆積在隊列中並按順序運行,這通常不是您想要的。

這是jQuery reference info.stop()和它的參數。