2011-08-24 109 views
2

我有一個簡單的手風琴菜單,我今天使用jQuery slideDown()slideUp()方法放在一起。 示例代碼:重複點擊後jQuery 1.6.2 slideUp()和slideDown()高度問題

<h1>the header</h1> 
<div class='thechild'> 
the content 
</div> 

$(function(){ 

    $('h1').click(function(){ 
     var next = $(this).next(); 
     if (next.is(':visible')) 
     { 
      next.stop().slideUp(); 
     } 
     else 
     { 
      next.stop().slideDown(); 
     }    
     return false; 
    }); 

}); 

這個偉大的工程,但是如果你點擊<h1>的一次,然後在動畫完成之前再次,你可以打破slideUp()slideDown()事件之一。 看來發生的是,第二次點擊時,它將slideUp()零高度罰款,但如果你滑下來,它將只滑動到它的最後一個最大高度 - 即高度.thechild是在最後一次中斷點擊動畫。

我需要的是一次點擊上下滑動或滑動.thechild視情況而定,第二次點擊停止動畫(如果正在運行)並向上滑動.thechild。隨後的第三次點擊應該滑動到.thechild到它的全高,而不是在點擊#2中斷時的高度。希望一切都有意義:)

我確信我曾經有過這個問題,並以某種方式解決它,但不記得(或谷歌)我想出的解決方案。這只是這些幻燈片方法的一個限制,而且是解決方法,可以在我的animate()調用中進行更多的高度調整嗎?

我試着玩各種布爾你可以通過.stop(),但無濟於事。必須有一些簡單的東西我想念,任何人都可以啓發我嗎?

的jsfiddle這裏:http://jsfiddle.net/cY6kX/

重建,在<h1>雙擊一堆倍,看會發生什麼,然後單擊幾次,看看它是如何打破這樣的,直到你重新加載頁面。

任何指針十分讚賞

回答

6

添加true, true到停止完成動畫在全:

$(function(){ 

    $('h1').click(function(){ 
     var next = $(this).next(); 
     if (next.is(':visible')) 
     { 
      next.stop(true, true).slideUp(); 
     } 
     else 
     { 
      next.stop(true, true).slideDown(); 
     }    
     return false; 
    }); 

}); 

小提琴:http://jsfiddle.net/maniator/cY6kX/2/

+0

幾秒鐘早hehe –

+0

都正確和兩個+1。 – jammypeach

+0

我在停止位置嘗試(true),(true,false)和(false,false)。如果沒有嘗試(真實,真實)以及甚至在閱讀.stop()的文檔之後,我的大腦必定會感到疲倦。感謝您指出明顯的:) – jammypeach

4

添加true到停止的方法。例如,stop(true,true)