2016-10-04 2 views
0

Ich versuche, die Schaltfläche zu verwenden, während der Wert auf "Start" gesetzt ist, um progregresive rote Kreise zu erstellen, bis ich die Taste drücke und es auf "Pause" geschaltet wird, wodurch die rote stoppt Kreiskreation.Erstellen Sie divs mit Start/Pause-Taste

Das Problem ist, wenn ich die "Start" -Taste den Browser abstürzt.

var actionBtn = document.querySelector(".btn"); 

function changeState(){ 
    if (actionBtn.value == "Start") { 
    actionBtn.value = "Pause"; 
    } 
    else { 
    actionBtn.value = "Start"; 
    } 
} 

function addElem(){ 
    while (actionBtn.value == "Start") { 
    var elemCreate = document.createElement("div"); 
    elemCreate.className = "circle"; 
    document.querySelector(".appWrap").appendChild(elemCreate); 
    } 
} 

actionBtn.addEventListener("click", function(){ 
    changeState(); 
    addElem(); 
}); 
+0

Sie können nicht eine Weile so verwenden, die Schleife wird nicht zulassen, dass die anderen Ereignisse ausgelöst werden. – epascarello

+0

Was kann ich schreiben, um die Schleife zu stoppen, wenn die Schaltfläche auf "Stop" gestellt ist? –

+1

Ohne irgendeine Art von Timing wird der Browser mehr Elemente erstellen, als Sie sich vorstellen können .... und stürzt immer ab. Ein paar tausend pro Sekunde wahrscheinlich –

Antwort

0

Sie müssen setTimeout oder setInterval und nicht eine while-Schleife verwenden. Die while-Schleife sperrt den Browser und Sie können das Bit, mit dem Sie die Schleife beenden, nicht umkehren. Außerdem läuft die while-Schleife sehr schnell, so dass Sie in kurzer Zeit viele Elemente hinzufügen können. Mit Timern können Sie die Rate steuern.

function addElem(){ 
    var elemCreate = document.createElement("div"); 
    elemCreate.className = "circle"; 
    document.querySelector(".appWrap").appendChild(elemCreate); 
} 

var timer; 
function changeState(){ 
    if (actionBtn.value == "Start") { 
    actionBtn.value = "Pause"; 
    timer = window.setInterval(addElem, 500); 
    } 
    else { 
    actionBtn.value = "Start"; 
    window.clearTimeout(timer); 
    } 
} 
+0

Ja, ich weiß, es funktioniert mit setInterval, wollte nur versuchen, das gleiche Ergebnis mit einer while-Schleife zu erreichen –