Der folgende Beitrag wurde am 25. 09. 2004, 17:18 Uhr von Kalle veröffentlicht.
Hallöle,
eine Prozedur zum Verschieben eines Bildes ruft sich so oft selbst auf, bis das Bild am neuen Platz ist:
var lauf = 0;
function Move(name,xvon,xbis) {
if ( xvon < xbis ) xvon = xvon +0.2;
else xvon = xvon -0.2;
window.document.images[name].style.marginLeft = xvon+'em';
lauf++;
if (( xvon == xbis ) || ( lauf > 100 )) lauf = 0;
else window.setTimeout("Move(name,xvon,xbis)",5);
}
Beim zweiten Durchlauf kommt der Fehler:
'xvon' ist undefiniert.
Mit Zwischenvariablen klappt es, ist aber doch wohl unnötig?
nm = name;
xv = xvon;
xb = xbis;
if (( xvon == xbis ) || ( lauf > 100 )) lauf = 0;
else window.setTimeout("Move(nm,xv,xb)",5);
}
Wie sind die Parameter zu definieren?
Lieben Gruß, Kalle
Der folgende Beitrag wurde am 25. 09. 2004, 17:21 Uhr von Christian Kruse veröffentlicht.
Hallo Kalle,
> [...]
> Wie sind die Parameter zu definieren?
> else window.setTimeout("Move(name,xvon,xbis)",5);
> [...]
> else window.setTimeout("Move(nm,xv,xb)",5);
Du uebergibst hier der Funktion setTimeout() einen String.
Dementsprechend musst du das auch zusammensetzen:
window.setTimeout("Move('"+nm+"',"+xv+","+xb+")",5);
Grüße,
CK
--
Beware Evildoers for my deed is done and every little damsel in distress will be shelted!
http://wwwtech.de/
Der folgende Beitrag wurde am 25. 09. 2004, 17:51 Uhr von Kalle veröffentlicht.
Hallo CK,
> Du uebergibst hier der Funktion setTimeout() einen String.
> Dementsprechend musst du das auch zusammensetzen:
>
> window.setTimeout("Move('"+nm+"',"+xv+","+xb+")",5);
Danke, das war's. Kalle
Der folgende Beitrag wurde am 25. 09. 2004, 19:27 Uhr von molily veröffentlicht.
Hallo,
> eine Prozedur zum Verschieben eines Bildes ruft sich so oft selbst auf, bis das Bild am neuen Platz ist:
>
> var lauf = 0;
> function Move(name,xvon,xbis) {
Die Funktionsparameter-Objekte sind nur in der Funktion selbst vorhanden. Nach Ablauf der jeweiligen Funktionausführung verfallen sie. Bei setTimeout ist das der Fall. Der Code, den man setTimeout übergibt, wird im globalen Kontext ausgeführt. Da existieren die Variablen name, xvon und xbis jedoch nicht.
> Mit Zwischenvariablen klappt es, ist aber doch wohl unnötig?
> nm = name;
> xv = xvon;
> xb = xbis;
> window.setTimeout("Move(nm,xv,xb)",5);
Logisch, weil jede Variable, die du in einer Funktion erstellst, im globalen Geltungsbereich gespeichert wird, nicht in dem der Funktion (Deklarationen mit »var« machen das Umgekehrte). Wenn dann der Code ausgeführt wird, den du setTimeout übergeben hast, kann auf die Variablen zugegriffen werden.
> Wie sind die Parameter zu definieren?
Wie Christian sagte. Alternativ kannst du die Variablen im globalen Geltungsbereich, also außerhalb der Funktion, deklarieren, genauso wie du es mit der Variable lauf machst. Du musst nur darauf achten, dass nicht zwei Move-»Schleifen« gleichzeitig laufen.
var lauf = 0, name, xvon, xbis;
Eine Alternativschreibweise von setTimeout (JavaScript 1.2) ist übrigens setTimeout(Move, 5, nm, xv, xb);, da brauchst du dir um Gültigkeitsbereiche keine Gedanken machen und auch nicht um die korrekte Einbettung der Variableninhalte in einen String.
Mathias
© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4