Як дізнатись за допомогою jQuery, якщо елемент анімований?


101

Я намагаюся перемістити деякі елементи на сторінці, і під час часу, коли відбувається анімація, я хочу, щоб "переповнення: приховано" застосовано до елементу, і "переповнення" повернулося до "авто", коли анімація буде завершена.

Я знаю, що jQuery має функцію утиліти, яка визначає, чи якийсь елемент анімується, але я не можу його знайти ніде в документах

Відповіді:


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

Більше інформації : https://api.jquery.com/animated-selector/


Або:

$(elem)
    .css('overflow' ,'hidden')
    .animate({/*options*/}, function(){
        // Callback function
        $(this).css('overflow', 'auto');
    };

так, це було, спасибі як я міг це пропустити? чорт, я старію

FYI, якщо ви не хочете ризикувати перезаписати стилі CSS, запрограмувавши "overflow: auto" у зворотному дзвінку, просто використовуйте .css('overflow', ''). Передача порожнього рядка взагалі видаляє це властивість зі стилю елемента. Не впевнений, чи це документоване поведінка, але це дуже корисна хитрість.
Ward DS

2
Я не думаю, що він підтримує анімацію CSS.
Gqqnbig

5

Крім того, щоб перевірити, чи щось не анімоване, ви можете просто додати "!":

if (!$(element).is(':animated')) {...}

Це дуже не вірно ... Протилежність jquery 'є' не 'не'. 'не' видаляє відфільтровані елементи з об’єкта jquery. Якщо ви хочете перевірити, чи не робите ви анімований об’єктif (!$(element).is(':animated')) {...}
amosmos

1
@amosmos Відповідь було відредаговано і схвалено громадою .. Я повернув її туди, де вона була правильною.
Білл

2
Чудово, лише зараз це дублікат прийнятої відповіді. BTW, що означає затверджена громадою?
амосмос

@amosmos припини тролінгу
Ерік Цицерон

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 animiton.
Michał Perłakowski

просто пропонуючи альтернативу. А ти мав на увазі анімацію?
Арі

Так, я мав на увазі анімацію. ІМО Ваша відповідь зовсім поза темою.
Michał Perłakowski


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.