Wie kann man in Javascript "for"-Schleifen verlangsamen?
Ich arbeite jetzt ein Jahr an Webseiten (Anfänger) und kenne mich schon mit den Basics von HTML, CSS, php und mySQL aus. Javascript brauche ich jetzt, ich will nämlich den Hintergrund einer Website im nachhinein verändern. Heißt: Nach einem "Intro" soll sich reibungslos die Hintergrundfarbe verändern. Nach ein paar Codeschnipseln bin ich nun so weit: var a = 64; b = 64; c = 64; function bgColor() { a++; b++; c++; document.body.style.backgroundColor= 'rgb(' + a + ',' + b + ',' + c + ')'; }
for (var i = 1; i < 200; i++) { setTimeout(function test(){ bgColor(); }, 1000) document.write(a); } Warum funktioniert das nicht? Die Farbe ändert sich sofort... document.write(a); ist mein debug, und es wird dauerhaft 64 ausgegeben. Ich habe schon mehrere Wege versucht, jetzt bin ich verzweifelt .. kann man die for-Schleife irgendwie anders verlangsamen?
5 Antworten
Bin zu faul das zu debuggen aber der Ansatz ist schon richtig. :) Allerdings setzt du in der Schleife 200 mal "sofort" einen Timeout in 1 Sekunde. D. h. eine Sekunde später wird die Funktion bgColor 200 Mal aufgerufen. Was du eher willst ist: Ein mal inital aufrufen und dann ruft sich die Funktion an ihrem Ende über einen Timeout selber durch. Sinngemäß:
var a = 64; var b = 64; var c = 64; function bgColor() { a++; b++; c++; document.body.style.backgroundColor= 'rgb(' + a + ',' + b + ',' + c + ')'; if (a < 255) { // Abbruchbedingung damit es keine Endlosschleife gibt window.setTimeout('bgColor', 1000); } } bgColor();
Ok nice, ergibt in meinem Kopf Sinn .. bloß es passiert gar nichts. :(
Code nochmal:
var a = 64; b = 64; c = 64; function bgColor() { a++; b++; c++; document.body.style.backgroundColor= 'rgb(' + a + ',' + b + ',' + c + ')'; } for (var i = 1; i < 200; i++) { setTimeout(function alois(){ bgColor(); }, 1000) document.write(a); }
Hi. Was du da baust ist veralteter code. Verwende lieber jQuery oder eine andere Bibliothek zur dommanipulation. Dort würde das so aussehen: $(document).ready(function(){ $("#deinDomElm").delay(1000).animate( { "background": "#fff" }, 250); }); }); wenn fehler drin sind tut es mir leid, schreib das mit dem handy
Soweit ich weiß kann jQuery die background-Eigenschaft nicht von Haus aus animieren.
Danke, das werde ich mir genauer anschaun.. Einfach JQuery einbinden und das schreiben? ^^
setTimeout(function(){deinCode();},1000); /*Somit wird deinCode() jede Sekunde abgerufen*/
Ich kenn mich mit Java Script nich sonderlich aus aber müsste es nich document.write(r) heißen?
Ich glaub nich das es was hilft, denn ich bezweifle das es was bringt die Geschwindigkeit des Farbwechselns zu ändern aber du kannst die Farben statt plus 1 z.B. einfach plus 0.1 rechnen.
document.write ist mein debug um zu testen ob die Schleife überhaupt funktioniert..
Das ist die Lösung, man muss nur noch bei
ein bgColor(); daraus machen! Danke!! ^^