Как с помощью jQuery узнать, анимируется ли элемент?

102

Я пытаюсь переместить некоторые элементы на странице, и во время анимации я хочу, чтобы к элементу применялось «overflow: hidden», а «overflow» обратно в «auto» после завершения анимации.

Я знаю, что jQuery имеет служебную функцию, которая определяет, анимируется ли какой-либо элемент, но я не могу найти ее нигде в документации.


источник

Ответы:

200
if( $(elem).is(':animated') ) {...}

Подробнее : https://api.jquery.com/animated-selector/


Или:

$(elem)
    .css('overflow' ,'hidden')
    .animate({/*options*/}, function(){
        // Callback function
        $(this).css('overflow', 'auto');
    };
Джеймс
источник
да, спасибо. как я мог это пропустить? блин, я старею
К вашему сведению, если вы не хотите рисковать перезаписывать свои стили CSS, запрограммировав "overflow: auto" в обратном вызове, просто используйте .css('overflow', ''). Передача пустой строки обычно полностью удаляет это свойство из стиля элемента. Не уверен, что это задокументированное поведение, но это очень полезный трюк.
Ward DS
2
Я не думаю, что он поддерживает анимацию CSS.
Gqqnbig
5

В качестве альтернативы, чтобы проверить, не анимировано ли что-то, вы можете просто добавить "!":

if (!$(element).is(':animated')) {...}
Тим
источник
Это совсем не так ... Противоположность jquery 'is' не 'not'. «not» удаляет отфильтрованные элементы из объекта jquery. Если вы хотите проверить не анимированный объект, вы это сделаетеif (!$(element).is(':animated')) {...}
amosmos
1
@amosmos Ответ был отредактирован и одобрен сообществом .. Я откатил его туда, где он был правильным.
Билл
2
Отлично, только теперь это дубликат принятого ответа. Кстати, что означает одобрение сообщества?
amosmos
@amosmos stop trolling
Эрик Цицерон
1

если вы используете cssанимацию и назначаете анимацию с помощью конкретного 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");
});
Ари
источник
OP использует анимацию jQuery.
Михал Перлаковски,
просто предлагаю альтернативу. А ты имел ввиду анимацию?
Ари
Да, я имел ввиду анимацию. ИМО, ваш ответ совершенно не по теме.
Михал Перлаковски,
0

Если вы хотите применить css к анимированным элементам, вы можете использовать :animatedпсевдоселектор и сделать это следующим образом:

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

источник: https://learn.jquery.com/using-jquery-core/selecting-elements/

Счастливый
источник
0
$('selector').click(function() {
  if ($(':animated').length) {
    return false;
  }

  $("html, body").scrollTop(0);
});
ананд вишвакарма
источник
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа. Чтобы получить качественный ответ, прочтите эту инструкцию .
thewaywewere