2012-04-28 3 views
6

Я создаю визуализацию создателя Судоку для своего класса алгоритмов (в Javascript). Алгоритм отлично работает, но мне трудно найти способ приостановить выполнение.Приостановка выполнения Javascript до нажатия кнопки

В настоящее время я использую prompt() для паузы, но это громоздко и раздражает. Есть ли способ сделать паузу до запуска другой функции (через кнопку HTML), кроме непрерывной петли while?

Я могу отправить код, но я не думаю, что это необходимо. В настоящее время я не использую jQuery, но могу, если нужно.

+0

нет, потому что 'window.stop()' не останавливает выполнение скрипта, он останавливает окно от загрузки, похожий на кнопку остановки браузера. – keune

ответ

8
var flag = true; 
function foo(){ 
    if (flag){ 
     // Do your magic here 
     ... 
     ... 
     setTimeout(foo, 100); 
    } 
} 

function stop(){ 
    flag = false; 
} 
<input type="button" onclick="stop();" value="stop it!!!" /> 

+1

Я пытаюсь избежать прокрутки петли while() в фоновом режиме. Есть ли другой путь? (Если нет, это выглядит довольно хорошо) – SomeKittens

+2

Вы имеете в виду 'setTimeout (foo)', а не 'setTimeout (flag)'. – DCoder

+0

@DCoder. Да, исправлено это минут назад. Благодарю. – gdoron

0

Если то, что вы пытаетесь сделать паузу в функцию, которая в противном случае держать бы зацикливание, я придумал хорошее решение:

HTML

<div id="stuff">Doing stuff</div> 
<button id="pause">Pause/Resume</button> 

JS

var paused = false; 

document.getElementById('pause').addEventListener('click', function() { 
    paused = !paused; 
    if (!paused) { 
    next(); 
    } 
}); 

function doStuff() { 
    // Do whatever you want here, then invoke next() for the next iteration of that function, for example: 
    // (Note that the window.setTimeout is NOT part of the solution) 
    window.setTimeout(function() { 
    document.getElementById('stuff').append('.'); 
    next(); 
    }, 300); 
} 

function next() { 
    if (!paused) { 
    doStuff(); 
    } 
} 

doStuff(); 

CodePen:https://codepen.io/liranh85/pen/baVqzY?editors=1010