for-Schleife, Funktionsaufruf + SetTimeout
MacGreg
- dhtml
0 Andreas Dölling0 MacGreg0 MacGreg0 wahsaga0 Andreas Dölling0 MacGreg
Hallo SelfHTML Forum!
Ich möchte ein Div über das "Verschwindenlassen" von darüberliegenden "Balken-Divs" einblenden. Man stelle sich einen quadratischen Container vor der mit Querbalken überlagert ist, die nach und nach mit folgender JS Funktion "kleiner werden"..
function slidehide(id) {
obj = document.getElementsByTagName("div");
obj[id].style.width = j;
j = j - 20;
idvar = id;
if(j == -4) { //j ist global definiert
ShowHide(id,'hidden');}
if(j > 0) {
window.setTimeout("slidehide('"+idvar+"');",1);
}
}
und mit dieser Funktion
function ShowHide(id, visibility) {
obj = document.getElementsByTagName("div");
obj[id].style.visibility = visibility;
}
dann verschwinden (ausgeblendet werden).
Nun habe ich über meinem quadratischen Div 33 dieser "Balken-Divs" liegen die ich gerne (zB durch Aufruf einer For Schleife) nach und nach kleiner werden und verschwinden lassen würde.
Leider schlugen all meine Versuche die slidehide() Funktion aus einer Schleife aufzurufen fehl, und ich denke mal es liegt an dem SetTimeout() das mir da einen Strich durch die Rechnung macht..
Hat jemand einen Ratschlag wie ich mein Problem lösen kann?
Danke im Voraus,
MacGreg
Hallo,
Leider schlugen all meine Versuche die slidehide() Funktion aus einer Schleife aufzurufen fehl,
wie sieht denn diese Schleife aus?
Und: wäre die Benutzung von window.setInterval() für Deine Zwecke nicht naheliegender?
Ciao,
Andreas
Hi,
wie sieht denn diese Schleife aus?
function startsh() {
for(id = 1; id <= 33; id++) {
slidehide(id);
}
}
Und: wäre die Benutzung von window.setInterval() für Deine Zwecke nicht naheliegender?
kenne ich gar nicht, werds mir mal anschauen.. danke schon mal :-)
MacGreg
Tja, window.setInterval mag naheliegender sein, führt aber in der Praxis zum selben Ergenis :-(
Wie es mir scheint, nimmt die for-Schleife die slidehide() aufruft, keine Rücksicht darauf ob slidehide() nun schon komplett druchgelaufen ist oder nicht... Wie kann ich erreichen, dass die for-Schleife erst dann inkrementiert wenn slidehide() "fertig ist"?
MacGreg
hi,
Wie es mir scheint, nimmt die for-Schleife die slidehide() aufruft, keine Rücksicht darauf ob slidehide() nun schon komplett druchgelaufen ist oder nicht...
wieso sollte sie denn auch? sie ist doch vollkommen unabhängig davon.
Wie kann ich erreichen, dass die for-Schleife erst dann inkrementiert wenn slidehide() "fertig ist"?
so ohne weiteres: gar nicht.
es gibt in JS keinerlei "pause"-befehl o.ä.
du könntest aber stattdessen dafür sorgen, dass slidehide() selber den "nächsten" punkt aufruft, wenn es mit seiner ausführung fertig ist (unter verzicht auf die for-schleife dann natürlich).
gruß,
wahsaga
Wie es mir scheint, nimmt die for-Schleife die slidehide() aufruft, keine Rücksicht darauf ob slidehide() nun schon komplett druchgelaufen ist oder nicht... Wie kann ich erreichen, dass die for-Schleife erst dann inkrementiert wenn slidehide() "fertig ist"?
Genau darauf wollte ich hinaus.
Die for-Schleife weiß natürlich nichts von einem Timeout. Die for-Schleife ruft nur eine Funktion bzw. Methode setTimeout auf und verwirft deren Rückgabewert (in Deinem Script jedenfalls).
Und dann geht's weiter mit dem nächsten Schleifendurchlauf.
Eine zeitgesteuerte Schleife läßt sich eben mit setInterval() umsetzen:
var myInterval;
function doSomething() {
// veraendere die Hoehe des DIV-Elements
// prufe, ob Abbruchbedingung erfuellt
// wenn ja -> Intervall abbrechen
if(...) window.clearInterval(myInterval);
}
// Anstossen der zeitgesteuerten Schleife
myInterval = window.setInterval('doSomething()', 500);
Hilft Dir das?
Ciao,
Andreas
var myInterval;
function doSomething() {
if(...) window.clearInterval(myInterval);
}
// Anstossen der zeitgesteuerten Schleife
myInterval = window.setInterval('doSomething()', 500);
Hilft Dir das?
Ja, das hat mir sehr geholfen! Vielen Dank!
MacGreg