Я заменил JavaScript, предоставленный вами, альтернативным решением, которое, я думаю, должно работать для описанной вами функциональности.
Вы можете обернуть setTimeout
в конструктор Promise
и await
- это завершение. Просто отключите кнопку перед вызовом setTimeout
и включите ее снова, как только истечет время ожидания.
Использование делегирования события - это более простой способ управления событиями, чем зацикливание на каждом элементе button
. Основная идея c состоит в том, чтобы поместить один прослушиватель событий в родительский элемент в иерархии DOM, а затем проверить аргумент event
, передаваемый обработчику при возникновении события. Это обеспечивает чистоту кода тем, что имеет уникальную настройку обработчика для каждого button
на странице. Ниже приведен пример:
const sliderEl = document.querySelector('#slider');
const TIMEOUT_DURATION = 5000;
sliderEl.addEventListener('click', async event => {
if (event.target.tagName === 'BUTTON') {
event.target.disabled = true;
await new Promise((resolve, reject) => {
setTimeout(resolve, TIMEOUT_DURATION);
});
event.target.disabled = false;
}
});
<div id="slider">
<div class="slide first">
<img src="Bilder/Download.jpg" alt="" />-->
<button>Rückwärts 1</button>
<button>Vorwärts 1</button>
</div>
<div class="slide second">
<img src="Bilder/image.jpg" alt="" />-->
<button>Rückwärts 2</button>
<button>Vorwärts 2</button>
</div>
<div class="slide third">
<img src="Bilder/Download.jpg" alt="" />-->
<button>Rückwärts 3</button>
<button>Vorwärts 3</button>
</div>
</div>
Если это не то, чего вы пытаетесь достичь, я могу перечитать вопрос и изменить свой ответ.