Zeit verzögern ohne For-Schleife oder Window.SetTimeout
Chocobo
- javascript
0 LanX0 Cheatah0 Daniel Thoma0 Cheatah0 Daniel Thoma0 Cheatah
0 Chocobo
Ich suche nach einer Möglichkeit, in einem Skript die Zeit zu verzögern, ohne dabei Window.SetTimeout zu verwenden, da ich dadurch um etwas anderes nach der Verzögerung auszuführen immer eine neue Funktion programmieren muss. Gibt es da einen Alternative zu Window.SetTimeout ohne eine neu Funktion programmieren zu müssen?
Sei dies eine Anrede
Ich suche nach einer Möglichkeit, in einem Skript die Zeit zu verzögern, ohne dabei Window.SetTimeout zu verwenden, da ich dadurch um etwas anderes nach der Verzögerung auszuführen immer eine neue Funktion programmieren muss. Gibt es da einen Alternative zu Window.SetTimeout ohne eine neu Funktion programmieren zu müssen?
bleib lieber bei SetTimeout! IMHO kannste in JS auch anonyme Funktionen
definieren, d.h. du übergibst den Funktionsinhalt direkt an SetTimeout()
Sei dies eine Verabschiedung
Rolf (dies ist mein Name ;)
Hi
Ich suche nach einer Möglichkeit, in einem Skript die Zeit zu verzögern, ohne dabei Window.SetTimeout zu verwenden, da ich dadurch um etwas anderes nach der Verzögerung auszuführen immer eine neue Funktion programmieren muss. Gibt es da einen Alternative zu Window.SetTimeout ohne eine neu Funktion programmieren zu müssen?
ungetestet:
window.setTimeout(new Function("code"));
ich denke auf sowas willste hinaus, oder :)
Bye
Rolf
Tach Rolf!
window.setTimeout(new Function("code"));
Stimmt, aber was findest Du daran so vorteilhaft gegenueber
window.setTimeout("code");
?
So long
Hi Calocybe
window.setTimeout(new Function("code"));
Stimmt,
Wirklich? Naja mittlerweile :) Ich ging bis gerade davon aus, dass es falsch ist. window.setTimeout erwartet standardmäßig einen String den er evaluiert,erst in aktuellen browsern frißt er auch direkt Funktionen!
Zitat:
In versions earlier than Microsoft® Internet Explorer 5, the first argument of setTimeout must be a string. Evaluation of the string is deferred until the specified interval elapses.http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/setTimeout.asp
Das Beispiel aus http://www.teamone.de/selfhtml/tecb.htm#a45 verleitet etwas zu der Fehlannahme, es ginge nur mit Funktionen, zumindest den Fragesteller!
aber was findest Du daran so vorteilhaft gegenueber
window.setTimeout("code");
Nichts! Nur so sollte es sein!
Read You
Rolf
Moin!
Wirklich? Naja mittlerweile :) Ich ging bis gerade davon aus, dass es falsch ist. window.setTimeout erwartet standardmäßig einen String den er evaluiert,erst in aktuellen browsern frißt er auch direkt Funktionen!
Ach so, das stimmt natuerlich, dass das mit aelteren Browsern nicht geht. Ich beziehe mich mittlerweile meist nur auf Browser ab Netscape 4.
Zitat:
In versions earlier than Microsoft® Internet Explorer 5, the first argument of setTimeout must be a string. Evaluation of the string is deferred until the specified interval elapses.http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/setTimeout.asp
Nun, bei Netscape geht das ab JS1.2, also NS4. (http://developer.netscape.com/docs/manuals/js/client/jsref/window.htm#1203758) Bei setInterval kann er es, seit es die Funktion gibt, naemlich auch seit JS1.2. Und IE kann JS1.2 ja erst seit Version 5, also passt alles zusammen.
Das Beispiel aus http://www.teamone.de/selfhtml/tecb.htm#a45 verleitet etwas zu der Fehlannahme, es ginge nur mit Funktionen, zumindest den Fragesteller!
Naja, fuer die komplette Beschreibung haette Stefan wissen muessen, was eine Funktionsreferenz ist. ;-)
So long
ReMoin,
Naja, fuer die komplette Beschreibung haette Stefan wissen muessen, was eine Funktionsreferenz ist. ;-)
Nana, nicht so garstig. Steht ja nix falsches drin, und mir fällt auf anhieb kein besseres
beispiel ein, eins wo _keine_ Funktion evaluiert wird.
was willste schreiben? Didaktik is not easy!
Ein Link zu eval wär vielleicht nicht schlecht.
Bye Rolf
Hi,
Window.SetTimeout
nie gehört. Meinst Du vielleicht window.setTimeout()?
Gibt es da einen Alternative zu Window.SetTimeout
Ab JavaScript 1.1 (IIRC) gibt es window.setInterval(). Eine Pause gibt es _nicht_, da diese den Seitenaufbau verzögern würde, was sinnfrei ist.
Cheatah
Hi,
da diese den Seitenaufbau verzögern würde, was sinnfrei ist.
bist Du Dir da in beidem sicher ?
Grüsse
Cyx23
Hi,
da diese den Seitenaufbau verzögern würde, was sinnfrei ist.
bist Du Dir da in beidem sicher ?
ziemlich, ja. Bedenke, daß eine Pause-Methode nicht nur aufgerufen würde, nachdem die Seite komplett geparst ist.
Cheatah
Hallo
Ein sleep(milisec) gibt es in JS leider nicht.
Habe ich auch schon oft vermisst und es gibt eigentlich keinen guten Grund dafür.
Der von Cheata angeführte ist keiner, da man JS ja nicht wärend des Seitenaufbaus ausführen muss.
Statt mehreren Funktionen könnte man auch eine rekursive verwenden:
function bla(a) {
if(this.arguments.length == 0) a = 0;
switch(a) {
case 0:
doSomething();
break;
case 1:
doSomethingElse();
break;
default:
return;
}
a++;
window.setTimeout("bla(a)",100);
}
Wenn man nun bla(); aufruft würde erst doSomething() und 100 milisekunden später doSomethingElse(); ausgeführt.
Durch weitere case-lables kann man das beliebig verlängern.
Gruß
Daniel
Hi,
Der von Cheata angeführte ist keiner, da man JS ja nicht wärend des Seitenaufbaus ausführen muss.
nicht muß, aber würde. JavaScript wurde nicht zum Spielen geschaffen, sondern um die Funktionalität einer Site zu unterstützen - durch erzwungene Wartezeiten schafft man das bestimmt nicht.
Nur weil Du eine sinnvolle Anwendung erdenken kannst, ist eine Funktion an sich noch nicht sinnvoll.
Cheatah
Hallo
JavaScript führt man nur dann sinnvollerweise beim Seitenauf aus,
wenn man HTML-Code eben wärend diesem Aufbauen will.
Nach dem Laden gibt es aber jede menge Gründe, bei der Ausführung
warten zu wollen.
Beispiel: Bewegen eines Layers für ein Menü
Wie du siehst, ist das Argument der User müsse warten, nicht besonders
weit gedacht.
Vielleicht fällt dir noch ein anderes ein.
Gruß
Daniel
Hi,
Nach dem Laden gibt es aber jede menge Gründe, bei der Ausführung
warten zu wollen.
die lassen sich durch window.setTimeout() problemlos umsetzen.
Wie du siehst, ist das Argument der User müsse warten, nicht besonders
weit gedacht.
Bei einer Pause muß der Benutzer warten. Eine Funktion bleibt weiterhin in der Ausführung; der Stack läuft ggf. voll; und wenn die Seite zufällig noch _nicht_ vollständig geparst wurde - was Du bei vielen Scripts nicht garantieren kannst, da sie z.B. über einen Event-Handler aufgerufen werden, der auch _vor_ onLoad feuern kann - dann _muß_ der Seitenaufbau ebenfalls pausieren.
Cheatah
Gut. Ich glaube meine Frage war zu unverständlich. Ich animiere per Javascript ein grafisches Menu. Daher habe ich zuerst die benötigten Bilder in Variablen geladen und danach folgende Funktionen (angepasst) zur Animation (1fps) verwendet:
function menu1()
{
window.document.images[Nummer des Bildes].src=Variablenname.src;
window.setTimeout ('menu2()',1000);
}
function menu2()
{
window.document.images[Nummer des Bildes].src=Varname.src;
window.setTimeout ('menu1()',1000);
}
Ich suchte nun nach einer Möglichkeit, die Zeitverzögerung durch Window.setTimeout() zu ersetzen, um den Code in 1 Funktion zu bekommen... Schade das das nicht geht. Vielen Dank für die Antworten.
Hallo Chocobo
Ich suchte nun nach einer Möglichkeit, die Zeitverzögerung durch Window.setTimeout() zu ersetzen, um den Code in 1 Funktion zu bekommen... Schade das das nicht geht. Vielen Dank für die Antworten.
Das geht mittels Parameter.
function menu1(welche)
{
if (welche==1){
window.document.images[Nummer des Bildes].src=Variablenname.src;
window.setTimeout ('menu1(-1)',1000);}
else
{
window.document.images[Nummer des Bildes].src=Varname.src;
window.setTimeout ('menu1(1)',1000);
}
}
Viele Grüße
Antje