was macht setTimeout eigentlich?
p@t
- javascript
hallo,
da ich jetzt schon den 2en tag dran bin eine kleine verzögerung in eine
layer einblendung/ausblendung einzubauen und einfach nicht dahinterkomme, will ich
doch noch einmal ganz von vorn anfangen!
setTimeout ist doch dazu da, eine funktion nach einer gewissen zeit
auszuführen oder etwa nicht?
nun gut das scheint ja auch zu funktionieren solange dies nur einmal
geschehen muss. Allerdings funkt es nicht mehr wenn ich in einer while
schleife bestimme dass eben die einblendung öfters vonstatten gehen soll.
nach der einblendung soll die ebene auch wieder ausgeblendet werden !!!
wie gesagt wenn js das nur einmal machen soll geht es ok! wenn es die
funktionen ein zweites mal durchlaufen soll, dann scheint eS mir irgendwie
die ausblendfunktion zu überspringen, obwohl die eigentlich unmittelbar
nach dem timeout aufruf folgt!
zum besseren verständnis hier ein auszug aus dem scrikpt:
//hier die funkt. welche mir durchlaufzahl festlegt!
function ebene()
{
while(x < zahl)
{
anfang++;ende++;
wert = anzahl.slice(anfang, ende);
auf();
}
}
// hier die funkt. die den layer einblendet (von macromedia (verzeiht mit ;-) )
function auf()
{
x++;
MM_showHideLayers(""+wert+"",'','show');
window.setTimeout("nix()",500);
}
// und jetzt nach 500millisek die funktion die nix tut ausser zu aufzurufen!
function nix()
{
zu();
}
// layer wiede schliessen und anschliessend weiter zu funkt. ebene!!!
function zu()
{
MM_showHideLayers('1','','hide','2','','hide','3','','hide','4','','hide');
ebene();
}
please help! bin echt am verzweifeln, da ich so langsam denke dass ich
einem ganz fatalen denkfehler nachgehe!
muchas gracias
p@
Morjen !
zum besseren verständnis hier ein auszug aus dem scrikpt:
^^^^^^^^^^^^^^^^^^^^ nein, leider nicht wirklich
trotzdem ein paar Gedanken:
ich gehe davon aus das die Variablen richtig definiert sind(insbesondere x, da es von mehreren Funktionen genutzt, aber niemals übergeben wird)
der Ablauf scheint mir etwas konfus zu sein:
1. ebene()
x < zahl, ruft auf() auf
2. auf()
erhöht x
ruft MM_showHideLayers(""+wert+"",'','show') auf
setzt den timer für nix()
zurück zu 1.
je nach Laufzeitdauer von MM_showHideLayers(""+wert+"",'','show') wird jetzt entweder nach Ablauf der Dauer nix() gestartet _oder_ der Timer für nix() neu gesetzt
MfG McNavc
PS: etwas umständlich erklärt, aber um die Zeit ;-)
Morjen !
zum besseren verständnis hier ein auszug aus dem scrikpt:
^^^^^^^^^^^^^^^^^^^^ nein, leider nicht wirklich
SORRY!
trotzdem ein paar Gedanken:
- ich gehe davon aus das die Variablen richtig definiert sind(insbesondere x, da es von mehreren Funktionen genutzt, aber niemals übergeben wird)
- der Ablauf scheint mir etwas konfus zu sein:
- ebene()
x < zahl, ruft auf() auf- auf()
erhöht x
ruft MM_showHideLayers(""+wert+"",'','show') auf
setzt den timer für nix()
zurück zu 1.
je nach Laufzeitdauer von MM_showHideLayers(""+wert+"",'','show') wird jetzt entweder nach Ablauf der Dauer nix() gestartet _oder_ der Timer für nix() neu gesetzt
ja!
- wenn du aber sagst das das Ganze beim erstenmal funktioniert, nehme ich eher an das beim zweiten Aufruf der Eintrittswert von x dem Austrittswert vom ersten Durchlauf enspricht. Lange Rede kurzer Sinn: beim zweiten Aufruf ist die Abbruchbedingung für die while Schleife von Anfang an erfüllt. Oder noch kürzer: setze x wieder auf den Startwert
ich setze x bei jeder runde wieder auf 0, hieran liegts nicht!
PS: etwas umständlich erklärt, aber um die Zeit ;-)
trotzdem danke!
noch mal: von der logik her dass setTimeout das nächste script verzögert ist doch richtig oder???
und dieses timeout ist doch eigentlich geschichte sobald die funktion dann ausgeführt wird oder???
ich krieg echt noch hörner mit dem ding! warum hat js keine pause function o.ä?!
greetz p@
Tagchen !
- der Ablauf scheint mir etwas konfus zu sein:
- ebene()
x < zahl, ruft auf() auf- auf()
erhöht x
ruft MM_showHideLayers(""+wert+"",'','show') auf
setzt den timer für nix()
zurück zu 1.
je nach Laufzeitdauer von MM_showHideLayers(""+wert+"",'','show') wird jetzt entweder nach Ablauf der Dauer nix() gestartet _oder_ der Timer für nix() neu gesetzt
ja!
Entweder hab ich's schlecht erklärt, oder wir reden aneinander vorbei :)
Ich versuchs noch mal mit einem Beispiel (die Zeiten sind zum besseren Verständniss natürlich übertrieben):
Problem:
im 1. Fall (timer wird überschrieben) ist der Ablauf Laufzeitbedingt, d.h. ist _NICHT_ vorhersehbar
(genausogut kann ja der Timerwert kleiner sein als die Dauer, in dem Fall würde nix() _irgendwo_ dazwischenfunken)
im 2. Fall erscheint es mir irgendwo sinnlos die Funktion nix() nur sporadisch aufzurufen - dies könnte man auch ohne Timer z.B. mit einem Zähler lösen
Gesamtproblem:
Ich kann auf Grund des Skripts nicht erkennen wann nix() eigentlich starten soll
Versuchen wir's vielleicht mit einem einfachen Ablaufplan:
1. Layer anzeigen
2. Verzögerung
3. Layer ausblenden
4. Verzögerung
5. weiter bei 1.
Wenn es das ist was du willst, kommst du mit zwei Funktionen aus:
function layerEin()
1. Layer einblenden
2. Layerwert erhöhen
3. Timer für layerAus() setzen
function layerAus()
1. Layer ausblenden
2. Timer für layerEin() setzen
MfG McNavc