Как я могу заставить CSS-анимацию JavaScript запускаться более одного раза?

У меня есть код JavaScript, который запускает анимацию CSS. Он работает нормально, но мне нужно обновить браузер, чтобы снова запустить его. Как я могу изменить свой код, чтобы он запускался каждый раз при нажатии кнопки?

Ниже приведен код, который я использовал.

JavaScript

document.getElementById('LogoContainer').addEventListener('click',function() {
    var c = document.getElementsByClassName('logo-rec');
    for (var i = 0; i < c.length; i++) {
        c[i].classList.add('logo-animate');
    }
})

HTML

<button id = "LogoContainer">
    <div class = "logo-rec"></div>
</button>

CSS

.logo-animate {
    animation-name: MoveLeft;
    animation-duration: 3s;
}

@keyframes MoveLeft {
      0% { transform: translatex(0px)   }
     50% { transform: translatex(-15px) }
    100% { transform: translatex(35px)  }
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что после того, как анимация запустилась, система думает - ну, я ее запустила, поэтому она не запускается снова при нажатии (название анимации остается прежним).

Итак, этот фрагмент добавляет прослушиватель событий для события animationend, и когда это происходит, он удаляет настройку класса, вызвавшую анимацию, поэтому, когда вы снова нажимаете, это новая настройка класса, и анимация повторяется.

document.getElementById('LogoContainer').addEventListener('click', function() {
  var c = document.getElementsByClassName('logo-rec');
  for (var i = 0; i < c.length; i++) {
    c[i].classList.add('logo-animate');
    c[i].addEventListener('animationend', function() {
      this.classList.remove('logo-animate');
    });
  }
})
.logo-animate {
  animation-name: MoveLeft;
  animation-duration: 3s;
}

@keyframes MoveLeft {
  0% {
    transform: translatex(0px)
  }
  50% {
    transform: translatex(-15px)
  }
  100% {
    transform: translatex(35px)
  }
}
<button id = "LogoContainer">
<div class = "logo-rec">abcd</div>
</button>

Хаворт, спасибо большое. Это работает отлично!

MC Squared 22.01.2023 00:18

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