Javascript erst fortsetzen, wenn eine bestimmte funktion fertig?
Flo
- javascript
hallöle
ich habe ein kleines problem mit einem javascript.
grundaufbau ist folgender:
for(i = 0; i < 10000; ++i) {
machwas;
}
funktionsaufruf();
die 10000 ist etwas übertrieben, aber soll darstellen, dass die schleife eine ganze weile braucht.
der funktionsaufruf soll erst geschen, nachdem die schleife komplett abgelaufen ist.
jedoch wird die funktion immer direkt aufgerufen und die schleife läuft im hintergrund weiter. wie kann ich das ändern?
jedoch wird die funktion immer direkt aufgerufen und die schleife läuft im hintergrund weiter.
Das kann nicht sein. JavaScripte werden immer nacheinander abgearbeitet, d.h. es gibt keine mehreren Threads in JavaScript, also kann kein Script »im Hintergrund« laufen.
Es kann nur sein, dass in der Schleife asynchrone Operationen durchgeführt werden (wie z.B. das Laden von Bildern, XMLHttpRequest-Anfragen und so weiter). Dann dauert das Durchlaufen der Schleife selbst nur ein paar Millisekunden. Es werden aber viele Funktionen zur Ausführung »hintenangestellt« - die werden dann aber erst ausgeführt, wenn funktionaufruf() schon abgearbeitet ist.
Zeige uns also mal den konkreten Code für »machwas«. Was wird da gemacht?
Mathias
du hast es bereits gesagt, es werden bilder geladen :D
document.Vorladen = new Array();
for(i = 0; i < count; ++i) {
document.Vorladen[i] = new Image();
document.Vorladen[i].src = Laden.arguments[i];
}
Schliessen();
kann man also nicht machen, dass erst nachdem alle bilder geladen sind, die nächste funktion ausgeführt wird?
kann man also nicht machen, dass erst nachdem alle bilder geladen sind, die nächste funktion ausgeführt wird?
Ja, z.B. indem du mit den load-Ereignissen der Bildobjekte arbeitest. Wenn der load-Handler von allen Image-Objekten gefeuert wurde, kannst du weitermachen.
var anzahlAllerBilder = 5, geladeneBilder = 0;
function loadHandler () {
geladeneBilder++;
if (geladeneBilder == anzahlAllerBilder) {
// Alle fertig geladen!
Ende();
}
}
for (var i = 0; i < anzahlAllerBilder; i++) {
var bild = new Image();
bild.onload = loadHandler;
}
loadHandler sollte fünfmal aufgerufen werden und erhöht jedes Mal den Zähler. Wenn der bei 5 angekommen ist, sind alle Bilder geladen und du kannst die Folgefunktion aufrufen.
Mathias