Как запускать анимацию по ключевым кадрам несколько раз (при каждом событии размытия)?

Я определил такую ​​простую анимацию:

@keyframes fullScale {
   0% {
      transform: scale(0);
   }
   100% {
      transform: scale(1);
   }
}

и прикрепил его к классу CSS:

.updated-animation {
  animation: fullScale 0.3s ease-in;
}

затем я попытался динамически добавить / удалить этот класс к элементам, которые необходимо анимировать всякий раз, когда пользователь теряет фокус. Итак, я использовал onblur = "update(this);" для этих HTML-элементов. Код jquery можно увидеть ниже:

function update(element) {
  $(element).removeClass('updated-animation');
  $(element).addClass('updated-animation');
}

Анимация работает должным образом только для первого события размытия.

Однако последующие события не запускают анимацию, даже если прослушиватель событий вызывается каждый раз, и я продолжаю удалять и повторно добавлять класс. Что не так с кодом? Как можно использовать эффект анимации более одного раза по запросу?

Вы удаляете класс, а затем сразу же добавляете его снова, поэтому я немного удивлен, что он вообще работает в первый раз. Не могли бы вы отредактировать вопрос, включив в него полный образец HTML и CSS.

Rory McCrossan 15.06.2018 11:52

В первый раз у него даже нет класса updated-animation. Так что это никак не влияет на его удаление. Как вы думаете, мне следует добавить тайм-аут между ними? Когда я пробую то же самое на консоли, он работает, как ожидалось, что действительно странно ...

iodel 15.06.2018 11:55

Я не понимаю того, что вы пытаетесь сделать. Тайм-аут, похоже, не имеет никакого значения - проблема в том, что вы меняете состояние при размытии, а затем сразу же снова возвращаете его в предыдущее состояние. Почему ты бы так поступил? Конечно, вам нужны функции: один при размытии, чтобы удалить класс, и пыльник при наведении, чтобы добавить его

Rory McCrossan 15.06.2018 11:56

Это не связано с наведением курсора. Я хочу, чтобы элемент анимировался только при потере фокуса. Но анимация должна воспроизводиться каждый раз, когда происходит одно и то же событие, поэтому я пытаюсь сбросить свойство анимации CSS, удалив и снова добавив класс.

iodel 15.06.2018 11:59

Похоже, время все-таки было проблемой. Я попытался добавить небольшую задержку перед повторным применением класса, и теперь он работает должным образом. setTimeout (() => {$ (element) .addClass ('обновленная-анимация');}, 200);

iodel 15.06.2018 12:47
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
3
5
568
0

Другие вопросы по теме