2012-04-28 20 views
6

私のAlgorithmsクラスのSudokuクリエータの可視化をJavascriptで作成しています。アルゴリズムは素晴らしいですが、私は実行を一時停止する方法を見つけるのが難しいです。ボタンを押すまでJavascriptの実行を一時停止する

現在、私はprompt()を使用して停止していますが、それはかさばり、迷惑です。連続したwhileループ以外の別の機能が(HTMLボタンを介して)実行されるまで、一時停止する方法はありますか?

私はコードを投稿できますが、それは必要とは思われません。私は現在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(flag)'ではなく 'setTimeout(foo)'を意味します。 – DCoder

+0

@DCoder。はい、1分前に修正しました。ありがとう。 – 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

関連する問題