多次单击 JQuery slideToggle() - 防止动画

Posted

技术标签:

【中文标题】多次单击 JQuery slideToggle() - 防止动画【英文标题】:JQuery slideToggle() clicked multiple times - prevent animation 【发布时间】:2013-01-26 17:18:38 【问题描述】:

我已经搜索了一段时间的解决方案,但似乎找不到。我想也许在我的小提琴中使用 JQuery 的.clearQueue(),但它不起作用。

这是fiddle。

要明确:我希望 sideToggle() 执行,但是一旦再次单击它并且第一个 slideToggle() 尚未完成,它应该停止第一个动画并向上滑动。使用.clearQueue() 方法,它确实可以单击两次,但是当单击例如三次时,框消失并且高度不知何故弄乱了。

【问题讨论】:

你可以使用 jquery.stop() api.jquery.com/stop 谢谢伙计!每天学习新的 jquery 东西! :) 像这样使用 jquery .stop 函数:$('div').stop().slideToggle(); 【参考方案1】:

使用 jquery .stop() api 可以解决问题。

Working example.

【讨论】:

在动画期间使用 stop() 可能会导致无法再达到原始高度的不良情况。请参阅@Hacktisch 答案以获得解决方案【参考方案2】:

在动画期间使用 stop() 可能会导致无法再达到原始高度的不良情况。

另一种选择是强制动画在点击再次触发之前完成:

function clickFunc() 
    var $this=$(this);
    if($this.hasClass('toggling'))return;
    $this.addClass('toggling')
    $this.stop().slideToggle(300,function()
        $this.removeClass('toggling');
    );

【讨论】:

【参考方案3】:

有一个插件可以用来暂停和恢复非 jQuery 原生的动画:http://tobia.github.com/Pause/

如果您不需要对动画进行 精细调整,则可以使用.finish(添加 jQuery 1.9)代替.clearQueue。问题是它突然结束了动画,看起来有点奇怪。

问题是 jQuery 不跟踪原始高度(只需输入$("div").data('originalHeight', $("div").height()) 自己来执行此操作)。这将通过在动画中间清除队列来防止高度被搞砸:

http://jsfiddle.net/xj3Py/3/

这仍然不是完美的,因为它会通过 3 次或更多的点击跳来跳去,但至少高度不会搞砸。

【讨论】:

以上是关于多次单击 JQuery slideToggle() - 防止动画的主要内容,如果未能解决你的问题,请参考以下文章

slideToggle()---单击隐藏/浮现--jQuery--click() 方法

slideToggle jQuery 在加载时关闭

jQuery Slidetoggle + 旋转

jquery幻灯片-slideToggle

将 slideToggle() 添加到函数中

如何修复这个 jQuery SlideToggle?