我已经搜索了一段时间的解决方案,但似乎找不到。我想也许在我的小提琴中使用 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');
});
}
有一个插件可以用来暂停和恢复非 jQuery 原生的动画:http: //tobia.github.com/Pause/
如果您不需要对动画进行如此精细的调整,那么您可以使用.finish
(添加 jQuery 1.9)而不是.clearQueue
. 问题是它突然结束了动画,这看起来有点奇怪。
问题是 jQuery 不跟踪原始高度(只是$("div").data('originalHeight', $("div").height())
自己做这个)。这将通过在动画中间清除队列来防止高度被搞砸:
这仍然不是完美的,因为它会通过 3 次或更多点击跳跃,但至少高度不会搞砸。