Почему при повторном клике setTimeout начинает работать быстрее?

при многочисленных кликах setTimeout ускоряется как это исправить?

const btn = document.querySelector('.button');
const success = document.querySelector('.success');

btn.onclick = () => {
  success.classList.add('success_active');
  
  setTimeout(() => {
    success.classList.remove('success_active');
  }, 1000)
}
.success {
  width: 200px;
  padding: 25px;
  background-color: #CEDDEC;
  text-align: center;
  opacity: 0;
  visibilyti: hidden;
  transition: 0.5s;
}

.success_active {
  opacity: 1;
  visibilyti: visible;
}
<div class="success"> Алерт </div>
<button class="button">Вызвать</button>


Ответы (1 шт):

Автор решения: vp_arth

const btn = document.querySelector('.button');
const success = document.querySelector('.success');

btn.onclick = () => {
  if (btn.timeoutHandle) {
    clearTimeout(btn.timeoutHandle);
  }
  success.classList.add('success_active');
  
  btn.timeoutHandle = setTimeout(() => {
    btn.timeoutHandle = null;
    success.classList.remove('success_active');
  }, 1000)
}
.success {
  width: 200px;
  padding: 25px;
  background-color: #CEDDEC;
  text-align: center;
  opacity: 0;
  visibilyti: hidden;
  transition: 0.5s;
}

.success_active {
  opacity: 1;
  visibilyti: visible;
}
<div class="success"> Алерт </div>
<button class="button">Вызвать</button>

→ Ссылка