Событие "click" не выполнялось стазу, а ожидало когда выполнится предыдущее событие
Функция выполняется в тот момент, когда ты нажал. Есть ли возможность дождаться полного выполнения события перед тем как приступить к другому событию. Подскажите как это сделать.
|
Он и так ждёт полного выполнения, если всё синхронно.
<button id="button">click me</button>
<script>
function stall(ms) {
const iterator = (function *() {
const end = Date.now() + ms;
while(Date.now() < end) yield true;
}());
while(iterator.next().value);
}
function logTime(name) {
console.log(name, new Date().toLocaleTimeString());
}
button.addEventListener('click', () => {
logTime(1);
stall(10000);
})
button.addEventListener('click', () => {
logTime(2);
})
</script>
Если же у тебя там какие-то асинхронные действия выполняются, то только отменять событие по умолчанию на время ожидания асинхронного ответа(event.preventDefault()) и вызывать нужные действий руками после завершения ожидания. Условно:
<button id="button">click me</button>
<script>
function delay(ms) {
return new Promise(r => setTimeout(r, ms, true));
}
function logTime(name) {
console.log(name, new Date().toLocaleTimeString());
}
let queue = null;
button.addEventListener('click', async () => {
if (queue) return;
logTime(1);
queue = [];
await delay(10000);
queue.forEach(([name, func]) => {
console.log('queued event', name);
func();
});
queue = null;
})
button.addEventListener('click', (event) => {
if (queue) {
queue.push(['click 2', () => logTime(2)])
event.preventDefault();
event.stopPropagation();
} else {
logTime(2)
}
})
</script>
|
| Часовой пояс GMT +3, время: 06:45. |