etreu Geschrieben 19. März 2002 Teilen Geschrieben 19. März 2002 Bei mir funktioniert die Verzögerung nicht. Wer weiss warum? Code: <script type="text/javascript"> <!-- var i; function leer() { //leer } function down() { i=-150; for (i=-150; i<0; i++) { document.all.tosee.style.top=i; setTimeout('leer()',250); } } function up() { i=0; for (i=0; i>-150; i--) { document.all.tosee.style.top=i; setTimeout('leer()',250); } } //--> </script> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
iCErAIN Geschrieben 19. März 2002 Teilen Geschrieben 19. März 2002 also 1. kenn ich den setimeout nur mit doppelten Anführungszeichen... aber das dürfte egal sein. Jedoch solltest du vielleicht die Verzögerung hoch setzen..ich sag nur der Wert 1000 ist eine Sekunde... also dürfte 250 nicht zu merken sein, oder?:confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lapso Geschrieben 19. März 2002 Teilen Geschrieben 19. März 2002 Original geschrieben von E-T Bei mir funktioniert die Verzögerung nicht. Wer weiss warum? Die Frage ist, was willst du erreichen? Anscheinend möchtest Du, dass dein Timeout und die leer() eine Pause machen, das tun sie aber nicht. Lies einmal in SelfHTML nach: http://selfhtml.teamone.de/javascript/objekte/window.htm#set_timeout Die Timeout-Funktion führt einen bestimmten Befehl (den ersten Parameter) nach n Millisekunden (den zweiten Parameter) aus. In deinem Code wird also nach einer Viertelsekunde eine leere Funktion ausgeführt, was sich natürlich nicht bemerkbar macht. wie wäre es damit: function down( i ) { i --; if ( i > 0 ) { document.all.tosee.style.top = i; setTimeout( "down(" + i + " );", 250 ); } else { alert( "fertig" ); } } down( -150 ); // starten Im übrigen funktioniert document.all NUR im Internet Explorer. Andere Browser quittieren das mit einem JS-Fehler. Gruss Matze Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 19. März 2002 Autor Teilen Geschrieben 19. März 2002 1. Beim Aufruf der leeren Funktion soll einfach nur eine Verzögerung erreicht werde. 2. Bei 150 Aufrufen macht sich die Verzögerung doch schon bemerkbar (außerdem ändert sich nichts bei der Änderung der Zeit auf 1000ms). 3. Beim Aufruf der Funktion aus der Funktion gab es einen Stack-Overflow. Wie ihr seht alles schon durch. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lapso Geschrieben 20. März 2002 Teilen Geschrieben 20. März 2002 Original geschrieben von E-T 1. Beim Aufruf der leeren Funktion soll einfach nur eine Verzögerung erreicht werde. 2. Bei 150 Aufrufen macht sich die Verzögerung doch schon bemerkbar (außerdem ändert sich nichts bei der Änderung der Zeit auf 1000ms). 3. Beim Aufruf der Funktion aus der Funktion gab es einen Stack-Overflow. Wie ihr seht alles schon durch. Ich fürchte, Du hast dir weder selfHTML noch meine Ausführungen durchgelesen. Daher ein letzter Versuch: setTimeout führt nach einer bestimmten Zeitspanne einen bestimmten JavaScript-Code aus. Das heißt aber *nicht*, dass der restliche Code auf dessen Ausführung wartet. Es wird einfach nur ein Timer gestartet, nach dessen Ablauf - während des weiteren Ablaufes der Scripte auf der Seite - etwas ausgeführt wird. In meinem Beispiel war übrigens ein logischer Fehler, der Dir aber auch hätte auffallen müssen: es muss heißen i++; statt i--; Grüße Matze Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
EvilInside Geschrieben 20. März 2002 Teilen Geschrieben 20. März 2002 In meinem Beispiel war übrigens ein logischer Fehler, der Dir aber auch hätte auffallen müssen: es muss heißen i++; statt i--; Das ist falsch, da die Schleife ja bis -150 läuft, ist das i-- absolut korrekt, wenn gleich vielleicht etwas unorthodox. Nun aber zum eigentlichen Problem. Wie mein Vorredner schon erwähnte, ist die setTimeout-Funktion mitnichten eine Art "sleep"-Befehl, daß heißt, mit setTimeout eine Verzögerung zu erreichen, geht auf deine Art und Weise nicht. for (i=-150; i<0; i++) { document.all.tosee.style.top=i; setTimeout('leer()',250); } Diese for-Schleife läuft direkt durch - an der Stelle "setTimeout('leer()',250);" wird ein Timer gestartet, der nach 250 Millisekunden den Befehl "leer()" aufruft - aber deine for-Schleife läuft sofort weiter. Darüberhinaus kann der Code aber ohnehin nicht funktionieren, denn document.all funktioniert nur im IE und in Opera (wenn auf IE umgestellt). Dann aber heißt die top-Eigenschaft nicht ...style.top, sondern ...style.pixelTop. HTH EvilInside Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 20. März 2002 Autor Teilen Geschrieben 20. März 2002 Hab nicht berücksichtigt, dass der Befehl keine Unterbrechung bedeutet. Aber in der JavaScript-Objektreferenz von Sytle-Objekt gibt es nur "top". Kein Eintrag zu "pixelTop" gefunden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lapso Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Original geschrieben von EvilInside Das ist falsch, da die Schleife ja bis -150 läuft, ist das i-- absolut korrekt, wenn gleich vielleicht etwas unorthodox. Nun, das ist wohl auch nicht korrekt. Der Initialwert ist -150. Bei jedem Funktionsaufruf wird i dekrementiert. Danach wird abgefragt ob i größer 0 ist. Das kann doch so nicht gehen. Also machen wir lieber eine defakto-Schleife wie: for ( var i = -150; i > 0; i ++ ) {} Das meinte ich. Darüberhinaus kann der Code aber ohnehin nicht funktionieren, denn document.all funktioniert nur im IE und in Opera (wenn auf IE umgestellt). Nicht ganz richtig. Opera behauptet zwar, dass das Object document.all existieren würde, aber es ist nur ein funktionsloser Dummy. So long Matze Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
EvilInside Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Der Initialwert ist -150. Bei jedem Funktionsaufruf wird i dekrementiert. Danach wird abgefragt ob i größer 0 ist. Das kann doch so nicht gehen. Also machen wir lieber eine defakto-Schleife wie: Stimmt - ich war im falschen Quelltext... Original geschrieben von lapso Nicht ganz richtig. Opera behauptet zwar, dass das Object document.all existieren würde, aber es ist nur ein funktionsloser Dummy. Sorry, aber das ist definitiv falsch. Man kann über document.all genauso Layer rumschubsen, wie im Internet Explorer. Voraussetzung ist, daß Opera sich als MSIE ausgeben soll. Dabei gibt Opera nicht nur einen anderen UserAgent-String aus, sondern verwendet auch ein anderes DOM. Und in diesem Fall funktioniert auch document.all . well, EvilInside Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lapso Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Original geschrieben von EvilInside Sorry, aber das ist definitiv falsch. Man kann über document.all genauso Layer rumschubsen, wie im Internet Explorer. Voraussetzung ist, daß Opera sich als MSIE ausgeben soll. Dabei gibt Opera nicht nur einen anderen UserAgent-String aus, sondern verwendet auch ein anderes DOM. Und in diesem Fall funktioniert auch document.all . Well! 1:0 für dich, das war mir noch nicht bekannt, aber offenbar kann sogar Opera 5.12 einen <DIV> via document.all ansprechen und verschieben. Aber jetzt kommt das Gegentor: Opera bietet nicht das komplette all-Objekt. Habe gerade mal testweise versucht, die Schriftart eines Input-Buttons via document.all zu manipulieren, nothing happens at all. Grüße Matthias Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
EvilInside Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Original geschrieben von lapso Aber jetzt kommt das Gegentor: Opera bietet nicht das komplette all-Objekt. Habe gerade mal testweise versucht, die Schriftart eines Input-Buttons via document.all zu manipulieren, nothing happens at all. Den Schuß kann ich parieren : in Opera 6 und Opera 5.12 klappt es bei mir auch mit Buttons. Allerdings streckte Opera 4.02 die Waffen. Beispiel-Code: im Script-Teil: function renameBtn() { document.all.TestButton.value = "peter"; } im dokument: <input type="button" name="TestButton" value="testen"> Die Funktion habe ich über einen Textlink gestartet. Und ein Form-Tag hatte ich natürlich auch noch im Dokument Trotzdem ist es gut möglich, daß Opera nicht das komplette DOM vom IE übernommen hat. Man sollte sich vielleicht nicht zu sehr darauf verlassen :cool: so long, EvilInside Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lapso Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Original geschrieben von EvilInside Den Schuß kann ich parieren : Nun, den input-value zu ändern ist eine Sache, CSS-Eigenschaftem zu ändern eine andere. Position-Anweisungen kann er manipulieren, andere wiederum nicht. Parier doch mal folgenden: <html> <body> <input type="button" value="klickme" style="font-size:12px;" > <script language="JavaScript"> document.all.tags("input")[0].style.fontSize = "30px"; </Script> </body> </html> ... das funzt nämlich nicht. Opera hat scheinbar, um schnell größt mögliche Kompatibilität mit proprietären Seiten herzustellen, nur die wichtigsten IE-DOM-Features umgesetzt. Nun, ich will das eigentlich nicht kritisieren. Grüße Matze Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
EvilInside Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Original geschrieben von lapso Nun, den input-value zu ändern ist eine Sache, CSS-Eigenschaftem zu ändern eine andere. Position-Anweisungen kann er manipulieren, andere wiederum nicht. [...] ... das funzt nämlich nicht. Opera hat scheinbar, um schnell größt mögliche Kompatibilität mit proprietären Seiten herzustellen, nur die wichtigsten IE-DOM-Features umgesetzt. Nun, ich will das eigentlich nicht kritisieren. Das ganze läßt sich in der Tat nicht umsetzen. Es hängt allerdings mit der Render-Engine von Opera zusammen, und weniger mit dem eigentlichen DOM. Opera ist nicht in der Lage, Seiten "dynamisch" zu rendern, d.h. ein nachträgliches Manipulieren der Styles oder anderer Inhalte geht in Opera prinzipiell nicht (egal welches DOM man nun benutzt). Das gilt übrigens auch für Layer, deren Inhalt dynamisch geschrieben wird. Das kann Opera (noch) nicht. Man kann Layer verschieben, ein- und ausblenden, aber eben keine Inhalte nachträglich in die Seite einfügen. Eine Ausnahme bilden u.a. Farben. Hier ein kleiner Auszug aus der Opera-Spec-Seite (http://www.opera.com/docs/specs/): Modifying the document structure is not yet possible (ie. you cannot add or remove HTML elements). [...] Presently, we support getting and setting the following CSS attributes for absolutely positioned HTML elements: -visibility -pixelLeft, pixelTop -pixelWidth, pixelHeight -zIndex -color, background (only for setting of colors) Ich habe es mit der style-Eigenschaft "color" auf die Schnelle allerdings nicht hinbekommen... Laut Opera soll aber das dynamische Verändern des Dokuments ab Version 7 möglich sein - man darf gespannt sein. Du hast also Recht, daß Opera eben wirklich nicht alle Funktionen und Eigenschaften des IE document.all-Objektes übernommen hat - das liegt aber eben daran, daß Opera das technisch auch einfach nicht kann. well, EvilInside Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lapso Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Original geschrieben von EvilInside well, Mensch, jetzt hängst du dich aber richtig rein. Ich hab mich darum nie besonders gekümmert, weil ich auf dHTML sowieso verzichte, wann immer es nur geht. ich mus malochen, bis neulich denn! Gruss Matze Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
jomama Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Um nochmal auf das Thema einzugehen, was willst du eigentlich mit deiner Verzögerung erreichen, E-T? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lapso Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Original geschrieben von jomama Um nochmal auf das Thema einzugehen, was willst du eigentlich mit deiner Verzögerung erreichen, E-T? Steht doch in sienem Quellcode. Da soll sich was bewegen. Gerne hilfreich: Matze Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
EvilInside Geschrieben 21. März 2002 Teilen Geschrieben 21. März 2002 Original geschrieben von jomama Um nochmal auf das Thema einzugehen, was willst du eigentlich mit deiner Verzögerung erreichen, E-T? Wenn ich es richtig sehe, will er ein Layer mit der Id "tosee" nach unten bzw. oben verschieben. Die Verzögerung braucht er, damit es eine flüssige Animation wird Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.