2012-04-28 59 views
6

Tôi đang tạo hình ảnh của người tạo Sudoku cho lớp Thuật toán của tôi (trong Javascript). Thuật toán hoạt động rất tốt, nhưng tôi đang gặp khó khăn khi tìm cách tạm dừng thực thi.Tạm dừng thực thi Javascript cho đến khi nhấn

Hiện tại, tôi đang sử dụng prompt() để tạm dừng nhưng điều đó thật cồng kềnh và khó chịu. Có cách nào để tạm dừng cho đến khi một chức năng khác được chạy (thông qua nút HTML) ngoài vòng lặp while liên tục không?

Tôi có thể đăng mã, nhưng tôi không nghĩ rằng nó là cần thiết. Tôi hiện không sử dụng jQuery, nhưng tôi có thể nếu cần.

+0

không, bởi vì 'window.stop() 'không ngừng thực hiện kịch bản, nó dừng lại cửa sổ từ tải, tương tự như nút dừng của trình duyệt. – keune

Trả lời

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

Tôi đang cố gắng tránh một vòng lặp 'while()' quay dọc theo nền. Còn cách nào khác không? (Nếu không, điều này có vẻ khá tốt) – SomeKittens

+2

Bạn có nghĩa là 'setTimeout (foo)', không phải 'setTimeout (flag)'. – DCoder

+0

@DCoder. Vâng, cố định một phút trước. cảm ơn. – gdoron

0

Nếu những gì bạn đang cố gắng để tạm dừng là một chức năng mà nếu không sẽ tiếp tục vòng lặp, tôi đã tìm ra một giải pháp tốt:

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

Các vấn đề liên quan