如何防止在动画完成之前点击 html 元素?

Posted

技术标签:

【中文标题】如何防止在动画完成之前点击 html 元素?【英文标题】:How can i prevent click on a html element before completion of animation? 【发布时间】:2012-06-09 11:58:01 【问题描述】:

我正在使用 div 上的点击事件绑定来展开/折叠 div。 展开/折叠使用发生 $('#myid').animate(myfunctiontocollapse/expand)。 现在例如 div 的高度为零,我单击 div 展开它,然后在完成展开之前再次单击它,调用折叠代码并且 div 变形。 折叠/展开时如何防止第二次点击事件?

【问题讨论】:

可以使用.stop(true),可以解绑点击事件。 【参考方案1】:

取消绑定单击,然后将处理程序重新绑定为完成参数的一部分

不清楚您的动画功能是什么,但show() 可能是您更好的选择:

var myClickHandler = function(el)
    $(el).unbind("click");
    $('#myid').show('slow', function()  $("#mytrigger").click(myClickHandler) 

$('#mytrigger').click(myClickHandler);

如果您的函数确实是自定义的,您也可以对 animate() 执行相同的操作。

【讨论】:

【参考方案2】:

您可以在 click 函数中检查它是否仍在动画,如果是则返回 false 以防止默认的点击动作和传播。

if($('#myid').is(':animated'))
    return false;

【讨论】:

【参考方案3】:

你可以使用jQuery的.stop()http://api.jquery.com/stop/方法来停止当前正在运行的动画。

这是一个示例代码。

$('#hoverme-stop-2').hover(function() 
  $(this).find('img').stop(true, true).fadeOut();
, function() 
  $(this).find('img').stop(true, true).fadeIn();
);

【讨论】:

我不想停止动画。如果第二次触发,我想停止点击事件。

以上是关于如何防止在动画完成之前点击 html 元素?的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何animate防止叠加 例如我把鼠标不断移入移出 效果就会不断重复,如何防止呢?

js click事件防止重复点击

如何防止jQuery对象动画重复执行

防止Jasmine测试expect()在JS完成执行之前解决

CAShapeLayer shadowPath 动画。如何防止动画完成时的阴影填充?

如何防止 SceneKit 动画在加载时立即播放?