tobias boettcher: werte zuweisen

hey,

ich habe mit dieser scriptsprache so meine probleme (heul), da ich sonst immer nur c++ oder pascal geschrieben habe.
also, ich habe ein objekt, eine <div> layer, der test heisst.

in js kann ich den linken positionswert über test.style.left auslesen. der ist aber nicht bspw. 10 sonder 10px. was soll das denn? oder anders gefragt, wie weise ich einem layer werte zu?
ich möchte einen layer über den bildschirm bewegen (hin und her)
so?:

<html>
<script>
var dir=1;
</script>
<body>

<div id="test" style="position:absolute; left:0; top:0; height:20; width:30; background-color:red;">
</div>

<script>
function moveIt()
{
 var x=test.style.left;
 x=x+dir;
 if (x>500 || x<0){dir=-dir;}
 test.style.left=x;
}
setTimeout('moveIt();'100000);
</script>

</body>
</html>

das klappt so nicht, da left keine zahl sonder eine zahl+"px" oder sowas ist. ausserdem bleibt der wert von der variable 'dir' nicht ergalten. kann man global variablen erstellen?

verzweifelnd tobias

ps.: mit welcher tastenkombination mache ich eigendlich den oder || operator? ich muss immer den ascii-code eingeben (pein)

  1. Hallo tobias,

    also Grundsätzlich: ERST büffeln, dann Code schreiben, dann fragen, nicht umgekehrt.

    Die Variable "dir" hast Du bereits als global definiert, natürlich bleibt sie nicht erhalten, weil Du ihr in der funktion moveIt einen anderen Wert zuweist (interessier Dich mal für Javascript-Operatoren bezüglich der Zuweisung "dir=-dir"). Dies ist übrigens auch in Pascal oder C so.

    Nach "var x=test.style.left;"kannst Du das überflüssige "px" mit
    x = x.slice(0, x.length - 2);
    ausfiltern, dann befindet sich in x eine Zahl. Vielleicht sicherheitshalber
    x = x * 1;

    Nun zu "setTimeout('moveIt();'100000);":
    Was du offenbar möchtest ist kein Timeout, sondern ein Setinterval:
    "setInterval('moveIt();'100000);"
    Damit das auch gespeichert bleibt:
    var merken = "setInterval('moveIt();'100000);"

    Nun zu den Fehlern:
    Das Semikolon ist falsch, ein Komma muss hin, und zwar NACH dem schliessenden Hochkomma:
    var merken = "setInterval('moveIt()',100000);"
    Und die Zeit ist ziemlich lang (100000 Millisekunden = 1,6 Minuten!

    Aber wie schon gesagt, alles steht in der Javascript-Referenz.

    MfG
    Hartmut R.

  2. hey,

    Hüh!

    ich habe mit dieser scriptsprache so meine probleme (heul), da ich sonst immer nur c++ oder pascal geschrieben habe.

    JavaScript ist so ne Art C++ für Anfänger, die Syntax ist so ziemlich gleich.

    also, ich habe ein objekt, eine <div> layer, der test heisst.

    in js kann ich den linken positionswert über test.style.left auslesen. der ist aber nicht bspw. 10 sonder 10px. was soll das denn? oder anders gefragt, wie weise ich einem layer werte zu?

    10px sind 10 Pixel, also kein Grund zur Panik

    ich möchte einen layer über den bildschirm bewegen (hin und her)
    so?:

    <html>
    <script>

    In das script-tag sollte man immer noch was dazuschreiben, entweder language oder type.

    var dir=1;
    </script>
    <body>

    <div id="test" style="position:absolute; left:0; top:0; height:20; width:30; background-color:red;">
    </div>

    <script>
    function moveIt()
    {
    var x=test.style.left;

    sauberer wäre
    var x=document.getElementById('test').style.left;
    und da du ja nur die Zahl willst
    var x=parseInt(document.getElementById('test').style.left);

    x=x+dir;

    oder x+=dir; wie man das von C++ gewöhnt ist

    if (x>500 || x<0){dir=-dir;}

    oder dir*=-1; ebenfalls von C++ nachempfunden

    test.style.left=x;

    hier sollte man besser wieder
    document.getElementById('test').style.left=x;
    verwenden
    Und dann noch ein
    setTimeout('moveIt()',100);
    dazuschreiben, so daß die funktion moveIt() 10 mal pro Sekunde aufgerufen wird

    }
    setTimeout('moveIt();'100000);

    Hier fehlt ein Komma, außerdem ist das für Schildkröten optimiert

    </script>

    </body>
    </html>

    das klappt so nicht, da left keine zahl sonder eine zahl+"px" oder sowas ist. ausserdem bleibt der wert von der variable 'dir' nicht ergalten. kann man global variablen erstellen?

    dir ist schon global, da var dir außerhalb einer funktion deklariert wurde.

    verzweifelnd tobias

    ps.: mit welcher tastenkombination mache ich eigendlich den oder || operator? ich muss immer den ascii-code eingeben (pein)

    mit [Alt GR]+[>] (die Taste mit dem größer und kleiner Zeichen)

    Lutz.