gameboy: event-Funktion wird nur einmal durchlaufen

Hallo zusammen,

ich möchte mit Hilfe der Pfeiltasten ein DIV steuern. Folgendes habe ich bereits:

var playerOne = document.getElementById("player1");

function draginit() {
 document.onkeydown = drag;
 document.onkeyup = dragstop;
}

function drag(ereignis) {
 var curKeyCode = -1;

if (document.all) {//IE
  curKeyCode = window.event.keyCode;
 } else {
  curKeyCode = ereignis.keyCode;
 }

switch (curKeyCode) {
  case 37: //left
      playerOne.style.left = eval(playerOne.offsetLeft-5)+"px";
   break;
  case 39: //right
      playerOne.style.left = eval(playerOne.offsetLeft+5)+"px";
   break;
  default: //nothing
 }
}

Wenn ich jetzt aber die linke oder rechte Pfeiltaste drücke, bewegt sich das DIV immer nur einmal(!) um 5px nach links oder rechts?

Wie muss man das ändern?

  1. Hallo,

    function draginit() {
    document.onkeydown = drag;
    document.onkeyup = dragstop;

    ohne diese Zeile funktioniert alles bei einem Moz 1.7.12 vortwährend

    }

    Gruß aus Berlin!
    eddi

    --
    Wer Rechtschreibfehler findet, darf sie behalten.
  2. hi,

    Wenn ich jetzt aber die linke oder rechte Pfeiltaste drücke, bewegt sich das DIV immer nur einmal(!) um 5px nach links oder rechts?

    das ist auch richtig so, denn das Ereignis "keydown" tritt nur einmal ein.

    Du kannst in draginit() ein Intervall starten, das deine Funktion drag() in bestimmten Zeitabständen immer wieder aufruft.
    siehe: setInterval()

    bei "keyup" beendest du das Intervall wieder.
    siehe: clearInterval()

    gruß
    peter

    1. hi,

      Wenn ich jetzt aber die linke oder rechte Pfeiltaste drücke, bewegt sich das DIV immer nur einmal(!) um 5px nach links oder rechts?

      das ist auch richtig so, denn das Ereignis "keydown" tritt nur einmal ein.

      Du kannst in draginit() ein Intervall starten, das deine Funktion drag() in bestimmten Zeitabständen immer wieder aufruft.
      siehe: setInterval()

      bin mit deinen funktionen etwas durcheinandergekommen. das intervall muß natürlich innerhalb der funktion drag() gestartet werden.

      bei "keyup" beendest du das Intervall wieder.
      siehe: clearInterval()

      wozu das eval()?
      das würde ich lieber rausschmeißen, das wird da nicht gebraucht.
      wenn du nicht auf die automatische typumwandlung von JS vertrauen willst, kannst du mit "String()" arbeiten.

      peter