Проблема в том, что анимации CSS с ключевыми кадрами будут по умолчанию только запускаться один раз .Можно изменить количество раз, которое они запускают, но это будет запускать их постоянно в цикле, что нежелательно.
Вместо этого необходимо выполнить сброс анимации.Для этого элементу необходимо удалить имя анимации (в данном случае fade
).Это можно сделать с помощью animation-name: none;
, однако правило должно быть помещено в элемент при удалении fade
.Обратите внимание на изменение в селекторе, чтобы имя анимации затухания имело приоритет при применении.
Кроме того, важно отметить, что если вы удалите и добавите тот же класс в функцию, из-за способачто браузеры работают, ничего не произойдет.Чтобы браузер распознал любые сделанные изменения, должна произойти перерисовка страницы ( вот список того, что делает ).Чтобы заставить страницу перерисовываться, я решил использовать offsetHeight
, поэтому вы видите heroImg.offsetHeight
, использованный в коде (обратите внимание, что его нужно только прочитать, его не нужно использовать или назначать).
Я высмеял ваше изображение с div для удобства.
let sliderInterval = setInterval(imgChange, 3000);
const heroImg = document.querySelector('.imgMock');
function imgChange() {
heroImg.classList.remove("fade");
heroImg.offsetHeight; // force repaint to recognize `animation-name: none;`
heroImg.classList.add("fade");
}
.imgMock.fade {
animation: fade 1.5s ease-in;
}
@keyframes fade {
from {opacity: .4}
to {opacity: 1}
}
.imgMock {
height:50px;
width:50px;
background-color:black;
animation-name: none;
}
<div class="hero">
<div class="imgMock"></div>
</div>