• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Funktion langsamer ablaufen lassen

Martin Grüning

New member
Hallo, liebe Forum-Leser!

Wie kann ich in JavaScript eine Funktion langsamer ablaufen lassen? In dieser Funktion ist eine doppelte Schleife, d.h. eine Schleife in der Schleife. Da das Ergebnis jedes Schleifendurchlaufs sofort am Bildschirm gezeigt wird, wechseln sich die Bilder viel zu schnell ab.

Die Methode window.setTimeout(‘meineFunktion(),Wartezeit_in_Millisekunden); kenne ich bereits. Hilf aber nicht weiter, da ich entweder meine eigentliche Funktion neu aufrufen müsste (=Anfangszustand) oder eine ganz neue Funktion brauche. Da sich aber mit jedem Schleifendurchlauf Variablen verändern, ist beides nicht sonderlich praktikabel.

Bitte erklärt eure Vorschläge etwas ausführlicher, mit reinem Quellcode und einem unfreundlichem „Ist doch ganz einfach“ ist mir wenig geholfen.

Martin.
 
Hier ist der Quelltext!

var y=0;
var z=2;
var x=0;
var c=0;

b=window.document.layers.length;
c=b-4;

function gross_werden()
{
while(y<=c)
{
z=2;
while(z>=0)
{
x=y+z;
window.document.layers[x].visibility="hide";
a=window.document.layers[x].top; //Höhe des gehenden Layers
window.document.layers[x+3].top=a+6;
window.document.layers[x+3].left=290;
window.document.layers[x+3].visibility="show";
z=z-1;
}
y=y+3;
window.setTimeout('gross_werden()',2000);
}
};


Diese Funktion soll eine große Anzahl von Layern aus- und einblenden und dabei den Ort des neu eingeblendeten Layers berechnen. Dadurch soll ein Effekt entstehen, als ob ein Schriftzug größer und dann wieder kleiner wird und dabei auch noch wandert. Vielleicht geht diese Aufgabenstellung auch intelligenter zu lösen, ist aber erstmal nicht das Problem.

Vielen Dank,
Martin.
 
Antwort auf eigene Frage

Ich habe in den tiefsten Tiefen meines JavaScript-Buches doch noch eine Möglichkeit gefunden, Funktionen langsamer ablaufen zu lassen.

Man muss einfach eine Zählschleife an geeigneter Stelle einbauen:

for(i=0;i<=1000;i++)
{
};

Diese Schleife zählt nur bis 1000, ohne etwas zu tun. Die 1000 sind ein willkürlicher Wert, keine Millisekunden. Da das eine Weile dauert, entsteht eine gewisse Zeitverzögerung bei der Abarbeitung der Anweisungen. Danach werden die folgenden Anweisungen befolgt.

Vielleicht ist diese Methode nicht ganz professionell, da sie wahrscheinlich auf verschiedenen Computern verschiedene Verzögerungen bewirkt. Aber sie ist einfach und sicher.

Weitere Möglichkeiten könnten sein, mit globalen Variablen zu arbeiten oder mit zwei Funktionen, die nach einer Wartezeit (timeSetout) die jeweils andere Funktion aufrufen. Habe ich selbst noch nicht getestet, die Anregungen stammen aus Gesprächen mit erfahreneren Programmierern.

Vielleicht hilft das ja jemandem weiter, der vor derselben Frage wie ich steht.

MfG
Martin
 
Zurück
Oben