如何使用 jQuery 确定元素是否正在动画?

IT技术 javascript jquery animation
2021-01-13 08:45:11

我正在尝试移动页面上的一些元素,在动画发生期间,我希望将“溢出:隐藏”应用于元素,并在动画完成后将“溢出”返回到“自动”。

我知道 jQuery 有一个实用函数,可以确定某个元素是否正在被动画化,但我在文档中的任何地方都找不到它

5个回答
if( $(elem).is(':animated') ) {...}

更多信息https : //api.jquery.com/animated-selector/


或者:

$(elem)
    .css('overflow' ,'hidden')
    .animate({/*options*/}, function(){
        // Callback function
        $(this).css('overflow', 'auto');
    };
是的,就是这样,谢谢。我怎么会错过呢?该死,我老了
2021-04-02 08:45:11
仅供参考,如果您不想冒险通过在回调中编程“溢出:自动”来覆盖您的 CSS 样式,只需使用.css('overflow', ''). 传递一个空字符串通常会从元素的样式中完全删除该属性。不确定这是否是记录在案的行为,但这是一个非常有用的技巧。
2021-04-04 08:45:11
我认为它不支持 CSS 动画。
2021-04-11 08:45:11

或者,要测试某些内容是否没有动画,您可以简单地添加一个“!”:

if (!$(element).is(':animated')) {...}
这是非常不正确的...... jquery 'is' 的反面不是 'not'。'not' 从 jquery 对象中删除过滤的元素。如果你想检查你做的非动画对象if (!$(element).is(':animated')) {...}
2021-03-17 08:45:11
@amosmos 停止拖钓
2021-03-22 08:45:11
@amosmos 答案已编辑并获得社区批准。我已将其回滚到正确的位置。
2021-03-28 08:45:11

如果您正在使用css动画并使用 specific 分配动画class name,那么您可以像这样检查它:

if($("#elem").hasClass("your_animation_class_name")) {}

但是请确保在动画完成后删除正在处理动画的类名!

此代码可用于class name在动画完成后删除

$("#elem").on('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend',
function(){ 
        $(this).removeClass("your_animation_class_name");
});
是的,我的意思是动画。海事组织你的回答完全是题外话。
2021-03-28 08:45:11
OP 正在使用 jQuery animaiton。
2021-04-04 08:45:11
只是建议一个替代方案。你是说动画吗?
2021-04-12 08:45:11

如果你想将 css 应用于动画元素,你可以使用:animated伪选择器并这样做,

$("selector").css('overflow','hidden');
$("selector:animated").css('overflow','auto');

来源:https : //learn.jquery.com/using-jquery-core/selecting-elements/

$('selector').click(function() {
  if ($(':animated').length) {
    return false;
  }

  $("html, body").scrollTop(0);
});
虽然此代码可能会回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高​​答案的长期value。请阅读此答案以提供高质量的答案。
2021-03-29 08:45:11