Как с помощью 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
$('selector').click(function() {
  if ($(':animated').length) {
    return false;
  }

  $("html, body").scrollTop(0);
});

Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа. Чтобы получить качественный ответ, прочтите эту инструкцию .
thewaywewere
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.