Dragon: Timeouts in Schleifen

Hi,

ich habe vor Schleifen mit Hilfe von  setTimeout  zu verzögern (einfahrender Text), aber diese Verzögerung verzögert nie die x-Wert-Variable x1:

------------------------------------
function txt1move() {
 while(x1 <= 400) {
 setTimeout("x1change()",100);
 }
}

function x1change() {
 x1 = x1 + 1;
 txt1.style.right = x1;
}
------------------------------------

Natürlich wurden alle Variablen vorher deklariert...

Die Variante, dass die Funktion sich im Timeout wieder selbst aufruft funktioniert zwar, aber mir gefällt nicht, dass ohne es direkt mitzubekommen die "Schleife" im Hintergrund immer weiter läuft, nur dass der x-Wert sich nicht mehr ändert.

Danke.

  1. hi hi

    x1 = x1 + 1;

    ^^^^^^^^^^^^
       geht auch kürzer => x1++;

    bist du dir sicher das dein x1 nicht größer wird??

    txt1.style.right = x1;

    ^^
                          ich weiß nicht ob das reicht!?

    ich glaube es muss  x1 + "px"; sein.

    bis bis roman

  2. Hi,

    ich habe vor Schleifen mit Hilfe von  setTimeout  zu verzögern (einfahrender Text), aber diese Verzögerung verzögert nie die x-Wert-Variable x1:

    Das geht nicht, Timeouts werden direkt gesetzt und erfolgen nach der angegebenen Zeit das Skript läuft derweil munter weiter.


    function txt1move() {
    while(x1 <= 400) {
    setTimeout("x1change()",100);
    }

    Damit erzeugst du 400 Timeouts die nach ca. 400 ms aufgerufen werden.

    Die Variante, dass die Funktion sich im Timeout wieder selbst aufruft funktioniert zwar, aber mir gefällt nicht, dass ohne es direkt mitzubekommen die "Schleife" im Hintergrund immer weiter läuft, nur dass der x-Wert sich nicht mehr ändert.

    Versteh ich nicht, du änderst doch den x wert, wenn du willst das er nicht mehr geändert wird mußt du den Timeout abbrechen.

    Struppi.

  3. Hallo nochmal.

    Danke für eure Hilfe! Ich hab jetzt zwei Varianten, die Funktionieren. Was sagt ihr dazu?
    --------------------------------------
    function txt1move() {
     setTimeout("setx1()",1);
    }

    function setx1() {
     x1 = x1 - 2;
     txt1.style.left = x1;
     if(x1 > 420)
     txt1move();
    }
    --------------------------------------
    function txt2move() {
     x2 = x2 - 2;
     txt2.style.left = x2;
     if(x2 > 460) setTimeout("txt2move()",1);
    }
    --------------------------------------
    Beide laufen bei mir, auch mit weggelassenem   + "px", was mich selbst wundert. Vielleicht geht das auch nur wegen der Toleranz des Browsers, aber dann ist dies natürlich kein sauberer Programmierstil.

    Leider hab ich auch schon das nächste Problem. Wie ihr seht steht das Timout auf 1. Also müsste der Text "reinrasen". Tut er aber nicht. Ganz gemütlich bequemt er sich in die Mitte des Bildschirms. Wie kann das sein? Bei dem Beispiel mit den zwei kreisenden Kugeln im SELFHTML-Abschnitt DHTML kann man die Kugeln auf "mega-schnell" einstellen und das funktioniert.

    Also bis denne, ich glaub langsam werd ich doch ins Bett gehen, oder ich designe mein Gästebuch noch etwas um, mal sehen.

    Grüße aus Mannheim.