Как только вы добавили идентификатор fade
, запустите анимацию и больше не повторяйте.
Вы должны каждый раз удалять его и добавлять снова. используя setTimeout
, чтобы дать css время, чтобы найти его удаленным.
Также я рекомендую использовать класс вместо идентификатора и использовать переход вместо ключевого кадра
let colorArray = ['red','yellow','green','teal']
let index = 0
function imageChanger(){
document.querySelector('.container').id = ''
if(index == colorArray.length-1) index = 0
else index++
document.querySelector('.container').style.backgroundColor = colorArray[index]
document.querySelector('.container').classList.remove('fade')
setTimeout( function(){ document.querySelector('.container').classList.add('fade')
}, 50);
}
.container{
height: 300px;
max-width: 400px;
background-color: teal;
opacity: .2;
transition: opacity 0s linear;
}
.container.fade{
transition: opacity 3s linear;
opacity: 1;
}
<button onclick="imageChanger()">Change</button>
<div class="container fade"></div>