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

Steuerung von Abfolgen von Funktionen in JavaScript

Siggi

New member
Wie erreiche ich es, daß in JavaScript die Ausführung einer Funktion auf den Abschluß der Ausführung der vorhergehenden Funktion wartet. Die vorhergehende Funktion ist eine setInterval()-Fkt., die erst einige Sekunden braucht.
Da aber setInterval() die nachfolgenden Anweisungen nicht bis zu seiner Abarbeitung stoppt, laufen diese ja leider sofort an.

Schon mal vielen Dank für Eure Mühe

Gruß Siggi
 
Kannst du

dann starte doch die zweite Funktion aus der ersten heraus entweder mit 'function sowieso ()' oder, was allerdings Flickschusterrei wäre, window.setTimeOut ('function sowieso ()', benötigte Zeit in Millisekunden).

Ansonsten zeig doch mal Link zum Quelltext, oder den Text ansich.
 
Hallo kasimir83,
Das mit dem Verschachteln der Funktionen ineinander geht zwar, bringt aber ein heilloses Durcheinander.
Die einzelnen Funktionen (changeColor und change Text) sind autonome, recht umfangreiche Scripte. Dabei ist die Funktion changeColor() eine setInterval-Funktion.
Nun soll aber "changeText()" erst genau dann initialisiert werden, wenn die "changeColor()"beendet ist.
Bisher habe ich leider keine Idee, wie man mit JavaScript so etwas wie eine wait-function realisieren kann.

Gruß Siggi

function combi(){
changeColor();
changeText();
changeColor();
}
 
Dadurch dass du zweimal changeColor () hast würde er sich in 'ner Endlosschleife aufhängen.

Definiere ganz zum Anfang eine Variable 'bool' die du auf 'true' setzt. Lasse die 'functionCombi()' weg und setze ans Ende von 'changeColor()'

if (bool)
{
changeText();
}

An den Anfang von 'changeText ()' schreibst du:

bool=false;

und am Ende:

changeColor();

Wenn jetzt am Ende in 'changeColor()' 'bool' auf 'false' steht, wird 'changeText()' nicht erneut aufgerufen.

Insgesamt etwa so:

var bool=true;

function changeColor()
}
:
:
:
if (bool)
{
changeText();
}
}

function changeText()
{
bool=false;
:
:
:
changeColor();
}

wenn das nicht funzt, zeig mal das Script her.
 
Hm. Ich glaube Dein Ansatz mit "bool" trifft nicht ganz den Sinn meines Anliegens. Hab' es vielleicht nicht richtig deutlich gemacht. Nachfolgend das Scriptschema.

Scriptschema:

// 1. 2 Grundfunktionen (externe autonome Module, die bei
Bedarf eingebunden werden)

function changeColor()
//komplexes Funktionsmodul zum Ausblenden bzw. Einblenden
des Ursprungstextes durch allmählichen Farbwechsel von
Ausgangs- zu Hintergrundfarbe oder umgekehrt (Dauer ca.
1000ms). Zeitsteuerung mittels setInterval() oder setTimeout

function changeText()
//Ersetzen des ausgeblendeten Textes einer Tabellenzelle
durch einen neuen Text mittels "innerHTML"

// 2. Funktion zur sinnvollen Kombination der oberen Module
(combi()), um folgenden Ablauf zu gewährleisten:
Ausgangstext auszublenden (changeColor()) ->
ausgeblendeten Text durch neuen Text ersetzen
(changeText()) -> neuen Text einblenden (changeColor())

function combi(){
changeColor(); //Ausblenden
changeText(); //Textwechsel - soll automatisch dann
initialisiert werden, wenn die
zeitgesteuerte "changeColor()" beendet ist
changeColor(); //Einblende des neuen Textes - soll
automatisch nach "changeText" starten

}

Wie gesagt, die ersten beiden Funktionen sind externe js-Dateien, die erst durch die Steuerungsfunktion combi() angesprochen werden sollen.
Natürlich ist eine Möglichkeit der Verknüpfung die von Dir angegebene Variante der Initialisierung der Nachfolgefunktion in der ersten Funktion. Das bedeutet allerdings, daß ich die Module bei jeder Javascript-Aktualisierung in der Website stets neu bearbeiten muß und die saubere modulare Scriptprogrammierung ist zum Teufel.
Die Module sind fertige Funktionseinheiten, die flesibel durch Parameterübergabe an wechselnde Bedingungen im Gesamtscript angepaßt werden können. Und das zeitliche Zusammenspiel der Module soll im Script durch Steuerungsfunktionen, wie "combi()" erreicht werden.
Das erfordert allerdings, daß eine Funktion erst startet, wenn die vorhergehende abgeschlossen ist. Bei den beiden Zeitmethoden "setInterval" und "setTimeout" starten die Nachfolgeanweisungen jedoch dummerweise schon parallel zu den Zeitmethoden.
Derartige Probleme kenne ich bei php z.B. nicht.

So, ich hoffe, ich hab's einigermaßen verständlich rübergebracht ;-) Da ich relativ unerfahren bin in JavaScript, kann es durchaus sein, daß ich hier eine unrealistisches Programmierkonzept umsetzen will.

Übrigens, kasimir82, herzlichen Dank für Dein Engagement für mein Script - regt zum Weitermachen an.

Gruß Siggi
 
Ich weiß ja nicht, mit welchem Tool Du arbeitest, aber beim DreamWeaver kann man eine Zeitsteuerung mittels Zeitleiste einbauen, zu jedem Zeitpunkt kann man da ein JS Verhalten (beliebige eingebaute oder eigene JS-Funktion) ausführen lassen.
Diese Timeline ist Flash-ähnlich und läßt sich auch recht einfach erstellen.
Vielleicht ist das also ein Ansatz, um das Problem zu lösen...
 
Gute Idee! Habe die Zeitleiste in Dreamweaver schon öfter verwendet - allerdings nicht für eigene Scripts. Werd's mal ausprobieren.

Gruß Siggi
 
Zurück
Oben