Layer bewegt sich nicht

hallöle :smile:

ich möchte gern eine laufschrift über ein bild bewegen, habe auch ein schlichtes javascript dazu und (wie konnte es anders sein?)- es rührt sich keinen millimeter.
kann hier wer den fehler erkennen?

var a=50;

function bewegen ()
{
a-=10;
if (a>50)
{
window.document.laufschrift.left=a;
window.document.laufschrift.top=350;
}
}

Test

dank & grüße
bernd

Hi du,

ich hab es jetzt zwar nicht probiert, aber auf den ersten Blick kann ich dir sagen, wo der Fehler liegt:

var a=50;

function bewegen ()
{
a-=10;
if (a>50)
{
window.document.laufschrift.left=a;
window.document.laufschrift.top=350;
}
}

Wo wird denn bei dir das In- bzw. Dekrementieren der Position realisiert?
Deine Funktion dekrementiert lediglich einmal a um 50, aber danach nie wieder. Klar, dass da nix läuft.

Fazit:
Eine Funktion wird doch nur einmal aufgerufen, also musst du noch eine Schleife einbauen.

ciao Bill

tja
guten tag, herr beutlin! :wink:

ich bin zwar ein leicht zu verwirrender anfänger, aber die if-geschichte ist doch eine schleife, gell?

und mein schlaues (?) buch sagt, dass die zeilen

a-=10;
if (a>50)

bewirken sollen, dass a so lange in 10er-schritten runter gezählt wird, wie es größer als 50 ist. das fand ich sehr schön nachvollziebar…
vielleicht sollte ich noch sagen, dass ich diesen (laufschrift-)layer auf 500px gesetzt habe, was netscape (4.7) auch so darstellt, aber bewegen tut sich nix…

dank für die nachfrage

telcontar :wink:

Hi Bernd,

und mein schlaues (?) buch sagt, dass die zeilen

a-=10;
if (a>50)

bewirken sollen, dass a so lange in 10er-schritten runter
gezählt wird, wie es größer als 50 ist. das fand ich sehr
schön nachvollziebar…

Ja, da hat dein schlaues Buch wohl recht, aber dieses Verhalten macht es in deinem Fall halt bloß ein mal!

Folgendes:
Beim Aufruf einer Funktion wird der innere Körper in den geschweiften Klammern ausgeführt und dann wird ein sogenannter Rückgabewert geliefert.
Man nehme z.B. folgende Funktion:

function quadrat(zahl) {
return zahl*zahl;
}

Du übergibst der Funktion also einen Parameter, z.B. die Zahl 4, und erhälst das Quadrat daraus, also 16.
Dies geschieht aber nur einmal pro Aufruf.

Genauso in deiner Funktion:

function bewegen () {
a-=10;
if (a>50) {
window.document.laufschrift.left=a;
window.document.laufschrift.top=350;
}
}

Um wirklich das zu erreichen, was du willst, musst du noch eine Schleife einbauen. (Sollte dein Buch da anderer Meinung sein, so verbrenne es bitte, denn dann ist es Rotz)

So geht es:

function bewegen () {
window.document.laufschrift.top=350;

for (a=500; a>50; a-=10) {
window.document.laufschrift.left=a;
}
}

Diese Funktion bewegt deine Laufschrift von a=500 in 10er-Schritten, solange a>50 gilt. Also der letzte Schritt ist dann von 60 nach 50.
Dann stoppt sie und tut nix mehr.
Du könntest aber noch eine IF-Abfrage einbauen, die dir bei a=60 dein a auf 500 zurücksetzt, also würde das ganze wieder von vorn anfangen.

Das wäre dann endlos!

Um deine ursprüngliche Funktion nochmal zu erläutern:

var a=50; // a wird mit 50 initialisiert

function bewegen ()
{
a-=10; // a wird beim Aufruf auf 40 gesetzt (also Schwachsinn)
if (a>50) // ist a>50? Nein, kann es ja nicht mehr sein
{
window.document.laufschrift.left=a; // wird nicht ausgeführt
window.document.laufschrift.top=350;// wird nicht ausgeführt
}
}

Da kann sich also nix bewegen.
Ist ja nun egal.

Ich hoffe es hilft dir bissel weiter!

ciao, Bill

1 „Gefällt mir“

yep
moin bill,
genau so läuft’s! war gestern zahntechnisch ziemlich platt aber nun sag ich schlicht: super! (läuft zwar noch etwas ruckelig ab, aber das ist für meine zwecke vielleicht sogar gar nicht schlecht).
besonders lieben dank für die gründliche erklärung der funktion, das hat gleich noch etwas durchblick obendrauf gebracht.

gruß & dank ins auenland
(oder bist du der aus der augsburger puppenkiste? :wink:

bernd