Ergebnis 1 bis 9 von 9
  1. #1
    Dudo ist offline Grünschnabel
    registriert
    05-07-2010
    Beiträge
    3

    Seitenfarbe alle 3 Sekunden ändern.

    Hi Leute,

    bin der totale Anfänger. Beschäftige mich seid 3 Tagen mit JavaScript.
    Meine Problem:
    Ich will alle 3 Sekunden die Seitenfarbe ändern und habe folgenden Code geschrieben.

    Code:
        function diskoPage(value)
        {
                     colors = new Array("blue", "yellow", "green", "orange", "black", "white", "cyan");
    
                     if(value == 7)
                     {
                             alert("Disko is over");
                     }
                     else
                     {
    
                             setTimeout("document.bgColor = colors[value];", 3000);
                             diskoPage(value++);
                     }
        }
    
    <body onload="diskoPage(0)">
    Wieso funktioniert dieser Code nicht?
    Bitte um Hilfe!
    Geändert von Dudo (08-07-2010 um 14:09 Uhr)

  2. #2
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.816

    AW: Seitenfarbe alle 3 Sekunden ändern.

    Ich vermute mal, weil value++ innerhalb der Klammern lediglich den um 1 erhöhten Wert übergibt, die Variable aber unverändert läßt.
    Versuch das value++ mal separat vor dem Aufruf und in die Klammern dann nur noch value

  3. #3
    Avatar von Junkee[]
    Junkee[] ist offline Lounge-Member
    registriert
    08-05-2009
    Ort
    Leonberg
    Beiträge
    3.169

    AW: Seitenfarbe alle 3 Sekunden ändern.

    oder ++value

  4. #4
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.757

    AW: Seitenfarbe alle 3 Sekunden ändern.

    value ist keine globale Variable und deswegen in der Ausführung des setTimeout-Strings nicht definiert (sollte auch in der Fehlerkonsole (Wo finde ich die Fehlerkonsole?) stehen) - auch ist dein setTimeout-Konstrukt falsch, da JS nicht auf das setTimeout wartet und somit gleich alle 7 Funktionsaufrufe direkt hintereinander durchlaufen und du damit eigentlich nur einmal 3s wartest und dann alle Farben auf einmal durchgelaufen werden.
    Du musst also deine Funkntionsaufrufe mit setTimeout steuern:
    Code:
    function diskoPage(){
    	if (!arguments.callee.color) arguments.callee.color = ["blue", "yellow", "green", "orange", "black", "white", "cyan"];
    	document.bgColor = arguments.callee.color[0];
    	arguments.callee.color.push(arguments.callee.color.shift());
    	window.setTimeout(diskoPage, 3000);
    }
    PS: "funktioniert nicht" ist keine Fehlerbeschreibung!

  5. #5
    Dudo ist offline Grünschnabel
    registriert
    05-07-2010
    Beiträge
    3

    AW: Seitenfarbe alle 3 Sekunden ändern.

    Ok danke schön.
    Der Code klappt perfekt.
    Muss nur noch dahinter steigen

  6. #6
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.816

    AW: Seitenfarbe alle 3 Sekunden ändern.

    Mit shift und push nimmt er einfach das erste Element im Array raus und fügt es hinten wieder an. Eine schöne Übung für RAM und CPU, nicht sonderlich effektiv aber es funktioniert.

  7. #7
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.757

    AW: Seitenfarbe alle 3 Sekunden ändern.

    Zitat Zitat von mikdoe Beitrag anzeigen
    Eine schöne Übung für RAM und CPU, nicht sonderlich effektiv aber es funktioniert.
    ...stimmt - aber alle 3 Sekunden kann man das denen schon zumuten

    Ansonsten bräuchte man hald noch ein zweites Attribut von arguments.callee, indem der aktuelle Index gespeichert wird und den muss man dann erhöhen und bei einem overflow wieder auf 0 setzen... mal testen, was schneller ist.

    Code:
    function sp(){
        arguments.callee.a.push(arguments.callee.a.shift());
        return arguments.callee.a[0]
    }
    sp.a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    
    function ix(){
        arguments.callee.i++;
        if (arguments.callee.i >= arguments.callee.a.length){
            arguments.callee.i = 0;
        }
        return arguments.callee.a[arguments.callee.i]
    }
    ix.i = 0;
    ix.a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    
    for (var i = 0; i < 100000; i++){
        sp();
        ix();
    }
    Ergebnis: sp braucht ca. 1.2 mal so lange wie ix (im FF - gemessen mit Firebug) - ist jetzt nicht gerade berauschend...
    Geändert von kkapsner (08-07-2010 um 16:20 Uhr)

  8. #8
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.712

    AW: Seitenfarbe alle 3 Sekunden ändern.

    Zitat Zitat von mikdoe Beitrag anzeigen
    Ich vermute mal, weil value++ innerhalb der Klammern lediglich den um 1 erhöhten Wert übergibt, die Variable aber unverändert läßt.
    kkapsner hat ja schon die Lösung gezeigt, aber dies oben kann ich selbst als Vermutung nicht so stehen lassen.
    funktionsaufruf(value++) übergibt value als parameter und erhöht dann diesen um 1,
    funktionsaufruf(++value) erhöht value zuerst um 1 und übergibt value dann als parameter.

  9. #9
    Avatar von mikdoe
    mikdoe ist offline Administrator
    registriert
    01-05-2010
    Beiträge
    7.816

    AW: Seitenfarbe alle 3 Sekunden ändern.

    Zitat Zitat von jspit Beitrag anzeigen
    funktionsaufruf(value++) übergibt value als parameter und erhöht dann diesen um 1,
    funktionsaufruf(++value) erhöht value zuerst um 1 und übergibt value dann als parameter.
    Korrekt, mein Versehen, sorry.
    Hab es mit funktion(value+1) verschleudert, dachte das verhält sich genau so wie funktion(value++) was es natürlich nicht tut.

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 21-02-2009, 01:02
  2. refresh alle 5 sekunden mit button ein- und ausschalten
    Von mruniversum im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 22-01-2008, 12:01
  3. javascript funktion alle x sekunden aufrufen
    Von cyberbill im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 09-05-2007, 17:48
  4. alle x sekunden anderer code
    Von .dominik. im Forum JavaScript
    Antworten: 2
    Letzter Beitrag: 11-04-2007, 20:04
  5. Automatischer Reload alle paar Sekunden?
    Von KingDani im Forum Allgemeines
    Antworten: 4
    Letzter Beitrag: 11-07-2003, 23:03

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •