2011-08-24 80 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)