2012-04-28 63 views
6

Estoy creando una visualización de un creador de Sudoku para mi clase de Algoritmos (en Javascript). El algoritmo funciona muy bien, pero tengo problemas para encontrar una forma de pausar la ejecución.Pausando la ejecución de Javascript hasta que presione el botón

Actualmente, estoy usando prompt() para hacer una pausa, pero eso es voluminoso y molesto. ¿Hay alguna forma de hacer una pausa hasta que se ejecute otra función (a través del botón HTML) que no sea un ciclo continuo while?

Puedo publicar el código, pero no creo que sea necesario. Actualmente no estoy usando jQuery, pero puedo si es necesario.

+0

no, porque 'window.stop()' no se detiene la ejecución del script, se detiene la ventana de carga, similar al botón de parada del navegador. – keune

Respuesta

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

Estoy tratando de evitar tener un bucle 'while()' en el fondo. ¿Hay alguna otra manera? (Si no, esto se ve bastante bien) – SomeKittens

+2

Quiere decir 'setTimeout (foo)', no 'setTimeout (flag)'. – DCoder

+0

@DCoder. Sí, solucionó eso hace un minuto. Gracias. – gdoron

0

Si lo que está tratando de hacer una pausa es una función que de lo contrario seguirá sonando, yo he llegado con una buena solución:

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

Cuestiones relacionadas