Wie erstelle ich eine Pause oder Verzögerung in der FOR-Schleife?

Lesezeit: 4 Minuten

Benutzeravatar von jams
Marmeladen

Ich arbeite an einer Website, auf der ich eine Pause oder Verzögerung erstellen muss.
Sagen Sie mir also bitte, wie ich eine Pause oder Verzögerung erzeugen kann for einhängen javascript oder jQuery

Dies ist ein Testbeispiel

 var s = document.getElementById("div1");
 for (i = 0; i < 10; i++) {
     s.innerHTML = s.innerHTML + i.toString();
     //create a pause of 2 seconds.
  }

  • Sie können JavaScript in einem Webbrowser nicht „anhalten“. Sie können jedoch Timer einrichten und veranlassen, dass Code zu einem späteren Zeitpunkt ausgeführt wird setTimeout() Und setInterval() APIs in allen Browsern verfügbar.

    – Spitze

    7. April 2012 um 22:06 Uhr

  • tldr: Sie müssen den Code in einen rekursiven Continuation-Passing-Stil konvertieren, wenn Sie die Vorteile der Asynchronität nutzen möchten. (Na ja, oder nutzen Sie einen cleveren Trick wie Guffa)

    – Hugomg

    8. April 2012 um 0:25

  • Ähnlich wie stackoverflow.com/questions/4548034/…

    – Paul Verest

    6. März 2014 um 7:45 Uhr

  • Beantwortet das deine Frage? Wie füge ich eine Verzögerung in einer JavaScript-Schleife hinzu?

    – Ivar

    13. April 2021 um 9:30 Uhr

Guffas Benutzeravatar
Guffa

Sie können in der Funktion keine Verzögerung verwenden, da dann die Änderung, die Sie am Element vornehmen, erst angezeigt wird, wenn Sie die Funktion verlassen.

Benutzen Sie die setTimeout So führen Sie Codeteile zu einem späteren Zeitpunkt aus:

var s = document.getElementById("div1");
for (i = 0; i < 10; i++) {

  // create a closure to preserve the value of "i"
  (function(i){

    window.setTimeout(function(){
      s.innerHTML = s.innerHTML + i.toString();
    }, i * 2000);

  }(i));

}

  • @Pointy: Guter Punkt. Ich habe einen Abschluss hinzugefügt, um jeden Wert beizubehalten.

    – Guffa

    7. April 2012 um 22:11 Uhr

  • @Guffa: Ihre Klammern sind in Ihrer Funktionsausführung deaktiviert

    – Glasscherben

    7. April 2012 um 23:55 Uhr

  • @BrokenGlass: Nein, das sind sie nicht. Der Code läuft einwandfrei. jsfiddle.net/Guffa/PcuxY

    – Guffa

    8. April 2012 um 8:27

  • Ich bin etwas verwirrt, ob die Schließung „den Wert bewahrt“. i„Warum wird das, was nicht berechnet wird, durch i * 2000 gleich 0 als 0 ist der erste Wert von i? Oder wenn i wird bei jeder Iteration erhöht, warum ist die Dauer zwischen den einzelnen Iterationen so? innerHTML Update nicht ebenfalls erhöht?

    – 1252748

    23. November 2016 um 6:03

  • Noch verwirrender ist es, wenn ich in der ersten Zeile der Schleife und in der ersten Zeile des Lebens protokolliere: Beide protokollieren sofort „0-9“. Ich weiß, es ist lange her, aber können Sie mir etwas erklären, was hier vor sich geht? jsbin.com/foqineciva/edit?html,js,output

    – 1252748

    23. November 2016 um 6:15 Uhr

Benutzeravatar von nicosantangelo
Nicosantangelo

var wonderfulFunction = function(i) {
   var s = document.getElementById("div1"); //you could pass this element as a parameter as well
   i = i || 0;
   if(i < 10) {
      s.innerHTML = s.innerHTML + i.toString();

      i++;
      //create a pause of 2 seconds.
      setTimeout(function() { wonderfulFunction(i) }, 2000);          
   }
}

//first call
wonderfulFunction(); //or wonderfulFunction(0);

Sie können Javascript-Code nicht anhalten, die gesamte Sprache ist für die Arbeit mit Ereignissen ausgelegt. Mit der von mir bereitgestellten Lösung können Sie die Funktion mit einer gewissen Verzögerung ausführen, die Ausführung wird jedoch nie gestoppt.

  • Dies stellt ein großes Problem dar, da alle Timeout-Funktionen denselben „i“-Wert haben. Sie werden alle 11 an „wonderfulFunction“ übergeben.

    – Spitze

    7. April 2012 um 22:10 Uhr

  • Was ist das for Schleife für? Vorausgesetzt, es führt immer das aus break Wäre es nicht einfacher, ein zu verwenden? if Stellungnahme? Aus dem gleichen Grund verstehe ich nicht, warum Sie die innere Funktion benötigen …

    – nnnnnn

    7. April 2012 um 22:34


  • @nnnnnn Weil ich die Antwort ohne nachzudenken bearbeitet habe. Ich habe zunächst einen anderen Ansatz gewählt und ihn dann geändert, um die Clousure zu verwenden. Der Weg ist geschrieben for ist nutzlos, Bearbeitungszeit :).

    – Nicosantangelo

    7. April 2012 um 22:39

  • Es tut mir leid, meine JS-Syntax ist nicht die beste. Was bedeutet die Zeile i = i || 0; bedeuten?

    – Victor Resnov

    28. November 2019 um 15:07 Uhr

  • @VictorResnov bedeutet es „zuweisen i für sich selbst, wenn der Wert von i ist wahr, andernfalls weisen Sie ihm den Wert 0 zu. Developer.mozilla.org/en-US/docs/Glossary/Truthy

    – Nicosantangelo

    5. März 2020 um 15:26

Ich habe alles versucht, aber ich denke, dieser Code ist besser, es ist ein sehr einfacher Code.

var s = document.getElementById("div1");
var i = 0;
setInterval(function () {s.innerHTML = s.innerHTML + i.toString();  i++;}, 2000);

Benutzeravatar von SKing7
SKing7

Wenn Sie eine Pause oder Verzögerung in der FOR-Schleife erstellen möchten, ist dies die einzige echte Methode

while (true) {
    if( new Date()-startTime >= 2000) {
        break;
    }
}

Die startTime ist die Zeit, bevor Sie while ausführen. Diese Methode führt jedoch dazu, dass die Browser sehr langsam werden

Es ist nicht möglich, eine Javascript-Funktion innerhalb einer direkt anzuhalten for Die Schleife wird dann später an dieser Stelle fortgesetzt.

Benutzeravatar von Starx
Starx

So sollten Sie es machen

var i = 0;
setTimeout(function() {
   s.innerHTML = s.innerHTML + i.toString();
   i++;
},2000);

Benutzeravatar von zatatatata
zatatatata

Der folgende Code ist ein Beispiel für Pseudo-Multithreading, das Sie in JS ausführen können. Er ist ungefähr ein Beispiel dafür, wie Sie jede Iteration einer Schleife verzögern können:

var counter = 0;

// A single iteration of your loop
// log the current value of counter as an example
// then wait before doing the next iteration
function printCounter() {
    console.log(counter);
    counter++;
    if (counter < 10)
        setTimeout(printCounter, 1000);
}

// Start the loop    
printCounter();

1451710cookie-checkWie erstelle ich eine Pause oder Verzögerung in der FOR-Schleife?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy