Moin,
ich habe einen Array (bzw Objekt in JS?, ist halt ursprünglich ein PHP-Array, den ich via json_encode() an JS übergebe) mit verschiedenen Daten, dieses will ich nacheinander abarbeiten, d.h. für jeden Eintrag soll etwas passieren (um genau zu sein, eine Änderung eines CSS Wertes per jQuery), dann soll kurz gewartet werden (dafür habe ich mir eine provisorische "sleep()" Funktion gesucht) und dann halt mit dem nächsten Wert weiter gemacht werden.
Theoretisch funktioniert es auch, nur dass nicht zwischen den Schritten gewartet wird, sondern einfach nach Ablauf der Gesamtzeit alles direkt auf einmal passiert (laut Konsole werden alle Schritte ausgeführt, aber eben auf einmal, wodurch man nur den Sprung vom ersten zum letzten sieht).
Ich versuchs mal etwas vereinfacht darzustellen was ich bisher gemacht habe:
"sleep" Funktion:
Sagen wir also mal in "data" sind nun 5 Einträge, dann werden die laut Konsole wie geplant zwar nacheinander ausgeführt, aber es werden eben einfach nach 7,5 Sekunden alle Schritte auf einmal ausgeführt (auch in der Konsole direkt alles angezeigt, nicht nacheinander) und nicht, wie es sein soll, "Schritt 1 => 1,5 Sekunden warten => Schritt 2..." etc.
Was mache ich falsch / woran liegt das bzw wie kann ich halt erreichen, dass Werte aus einem Array/Objekt tatsächlich nacheinander abgearbeitet werden (so dass es, wie in diesem Fall z.B. angedacht, so aussieht als ob ein Balken langsam von 100% auf 0% schrumpft)?
Die genutzte jQuery Version ist btw 3.1.0, falls das wichtig ist.
ich habe einen Array (bzw Objekt in JS?, ist halt ursprünglich ein PHP-Array, den ich via json_encode() an JS übergebe) mit verschiedenen Daten, dieses will ich nacheinander abarbeiten, d.h. für jeden Eintrag soll etwas passieren (um genau zu sein, eine Änderung eines CSS Wertes per jQuery), dann soll kurz gewartet werden (dafür habe ich mir eine provisorische "sleep()" Funktion gesucht) und dann halt mit dem nächsten Wert weiter gemacht werden.
Theoretisch funktioniert es auch, nur dass nicht zwischen den Schritten gewartet wird, sondern einfach nach Ablauf der Gesamtzeit alles direkt auf einmal passiert (laut Konsole werden alle Schritte ausgeführt, aber eben auf einmal, wodurch man nur den Sprung vom ersten zum letzten sieht).
Ich versuchs mal etwas vereinfacht darzustellen was ich bisher gemacht habe:
Code:
function foo () {
data.forEach(function(entry) {
console.log(entry); // Zeigt das richtige an, so weit funktionierts also
$('#blubb').css('width', entry.p + '%'); // Verkleinert die Länge eines Balkens
sleep(1500);
});
}
"sleep" Funktion:
Code:
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
Sagen wir also mal in "data" sind nun 5 Einträge, dann werden die laut Konsole wie geplant zwar nacheinander ausgeführt, aber es werden eben einfach nach 7,5 Sekunden alle Schritte auf einmal ausgeführt (auch in der Konsole direkt alles angezeigt, nicht nacheinander) und nicht, wie es sein soll, "Schritt 1 => 1,5 Sekunden warten => Schritt 2..." etc.
Was mache ich falsch / woran liegt das bzw wie kann ich halt erreichen, dass Werte aus einem Array/Objekt tatsächlich nacheinander abgearbeitet werden (so dass es, wie in diesem Fall z.B. angedacht, so aussieht als ob ein Balken langsam von 100% auf 0% schrumpft)?
Die genutzte jQuery Version ist btw 3.1.0, falls das wichtig ist.