Как приостановить и воспроизвести цикл в JavaScript с помощью прослушивателей событий?

Опубликовано: 27 Августа, 2022

Ниже приведена программа JavaScript для манипулирования DOM, которая в основном о том, как приостановить и воспроизвести цикл в JavaScript с использованием прослушивателей событий (не путать с задержкой) . В этой статье мы используем JavaScript с HTML, поэтому нам нужен веб-браузер, например, Chrome (рекомендуется) или приложение Electron. Приостановка и воспроизведение цикла — такая сложная задача почти во всех языках программирования, и нет простого решения, чтобы приостановить цикл между его выполнением и воспроизвести его снова по нажатию кнопки, как мы это делаем в видеоклипах, но концепция JavaScript Promise позволяет легко приостанавливать и воспроизводить цикл с прослушивателями событий элементов DOM. Здесь пауза и воспроизведение цикла не означает задержку цикла.
Если вы ищете задержку цикла в JavaScript, мы уже создали для нее отдельную статью. Посетите: https://www.geeksforgeeks.org/how-to-delay-a-loop-in-javascript-using-async. -ожидание-с-обещанием/

Подход: Наш подход в этой программе к приостановке и воспроизведению цикла такой же, как и к задержке цикла с помощью Promise, но вместо того, чтобы разрешать Promise после определенного времени, мы будем разрешать Promise прослушивателями событий. Здесь в коде мы использовали функцию с именем Pauser , которая будет приостанавливать выполнение программы внутри цикла, и мы использовали переменную stats , которая действует как флаг для паузы.
Если статистика равна 0, то флаг паузы равен false, а если статистика равна 1, то флаг паузы равен true, а затем он вызовет Pauser() и будет ждать, пока прослушиватель событий будет разрешен.

Синтаксис определения функции:

Javascript




// This event listener will listen for 
// pause button click which will assign
// stats = 1 (means pause flag true)
document.getElementById("pa")
    .addEventListener("click", function () {
        stats = 1;
    })
  
function pauser() {
    return new Promise(resolve => {
        let playbuttonclick = function () {
  
            // Remove the event from play button
            // after clicking play button 
            document.getElementById("playbuttonelement")
                .removeEventListener("click", playbuttonclick);
            stats = 0;
            resolve("resolved");
        }
  
        // Here is the event listener for play
        // button (instead of setTimeout) which
        // will wait for the element to get click
        // to get resolved until then it will be
        // remain stucked inside Promise 
        document.getElementById("playbuttonelement")
            .addEventListener("click", playbuttonclick)
    })
}

Синтаксис вызова функции:

Javascript




async anyfunction()  {
    for (let i = 0; i < 10000; i++) {
  
        // This statement will check for 
        // the stats value and if it is
        // equal to 1 then it will call
        // pauser() and the loop will 
        // get paused!
        if (stats == 1) await pauser();
    }
}

Мы обсудили всю работу кода выше, теперь вот полный код, просто скопируйте и создайте отдельный html-файл и запустите его!

Полный код

Выход:

Применение вышеуказанной реализации : секундомер, приостановка/воспроизведение любой пользовательской анимации, созданной в javascript, визуализация данных и т. д.

Примечание. В этом коде мы использовали событие «щелчок», другие пользователи могут использовать любой обработчик событий, такой как щелчок, наведение мыши, наведение мыши, наведение мыши, перемещение мыши, нажатие клавиши и т. д. по своему выбору.