我已经搜索了一段时间,但似乎找不到解决方案。我尝试使用我的示例中的JQuery的.clearQueue()
方法,但它并不能正常工作。
这是示例链接。
明确一下:我想要执行sideToggle(),但是如果再次点击它,而第一个slideToggle()还没有完成动画,它就应该停止第一个动画并向上收缩。使用.clearQueue()
方法可以实现两次点击的功能,但是当点击三次时,框会消失,并且高度出现问题。
我已经搜索了一段时间,但似乎找不到解决方案。我尝试使用我的示例中的JQuery的.clearQueue()
方法,但它并不能正常工作。
这是示例链接。
明确一下:我想要执行sideToggle(),但是如果再次点击它,而第一个slideToggle()还没有完成动画,它就应该停止第一个动画并向上收缩。使用.clearQueue()
方法可以实现两次点击的功能,但是当点击三次时,框会消失,并且高度出现问题。
在动画过程中使用stop()可能会导致原始高度无法再次达到的糟糕情况。
另一种选择是在点击能够再次触发动画之前强制完成动画:
function clickFunc() {
var $this=$(this);
if($this.hasClass('toggling')){return;}
$this.addClass('toggling')
$this.stop().slideToggle(300,function(){
$this.removeClass('toggling');
});
}
.finish
(jQuery 1.9添加)代替.clearQueue
。问题是这样会突然结束动画,看起来有点奇怪。$("div").data('originalHeight', $("div").height())
即可)。这将防止在动画进行中清除队列时高度被搞乱:
http://jsfiddle.net/xj3Py/3/
这仍然不完美,因为点击3次或更多次会让它跳来跳去,但至少高度不会出问题。