M23: keydown ohne verzögerung

Hallo Leute,

ich habe mithilfe von "tabindex=0" ein div fokusierbar gemacht und ihm eine keylistener verpasst(keydown).
Dadurch lässt sich ein im canvas eine Spielfigur steuern. Das Problem ist,
dass es anscheinend zu einer Verzögerung von ca einer halben Sekunde kommt, bis JQuery checkt, dass die Taste gedrückt wird.

Ich hoffe ihr wisst, was ich meine. Wir kann ich diese Verzögerung umgehen?

Hier ein kleines ausführbares Programm: index.html

  
<!DOCTYPE html>  
  
<html>  
  
	<head>  
		<title>Spiel</title>  
		<script type="text/javascript" src="js/jquery1.8.3.min.js"></script>  
	</head>  
  
	<body>  
		<div tabindex="0">  
			<canvas id="canvas" style="background-color: white" width="320" height="240"></canvas>  
		</div>  
	</body>  
		  
	<script>  
		var x = 0;  
		var y = 0;  
		var c = document.getElementById("canvas");  
		var ctxt = c.getContext("2d");  
		$("div").focus();  
		$("div").keypress(function(e){  
			switch(e.keyCode){  
				case 38:  
					y -= 5;  
					break;  
				case 39:  
					x += 5;  
					break;  
				case 40:  
					y += 5;  
					break;  
				case 37:  
					x -= 5;  
					break;  
			}  
			draw();  
		});  
		  
		function draw(){  
			console.log("draw");  
			ctxt.fillStyle="red";  
			ctxt.fillRect(x,y,10,10);  
		}  
	</script>  
	  
</html>  
  

Am besten öffnet ihr es mit dem Firefox, weil ich es nur damit bis jetzt getestet habe(Version 17.0.1).
Haltet eine Richtung gedrückt und ihr müsstet feststellen, dass der Browser nach ca 1 Sekunde reagiert.

Danke im voraus.

  1. Haltet eine Richtung gedrückt und ihr müsstet feststellen, dass der Browser nach ca 1 Sekunde reagiert.

    Die Frage, ob und wann eine gedrückt gehaltene Taste als wiederholter Tastendruck gewertet wird, entscheidet das Betriebssystem des Nutzers, welches den Browser über den gewerteten "Tastendruck" informiert.

    Deshalb kann der Nutzer das Verhalten auch in einem vorm Browser und auch sämtlich anderer Software unabhängigen Programm einstellen.

    1. Haltet eine Richtung gedrückt und ihr müsstet feststellen, dass der Browser nach ca 1 Sekunde reagiert.

      Die Frage, ob und wann eine gedrückt gehaltene Taste als wiederholter Tastendruck gewertet wird, entscheidet das Betriebssystem des Nutzers, welches den Browser über den gewerteten "Tastendruck" informiert.

      Deshalb kann der Nutzer das Verhalten auch in einem vorm Browser und auch sämtlich anderer Software unabhängigen Programm einstellen.

      Das bedeutet, ich habe keinen Einfluss?

      1. Hallo,

        Deshalb kann der Nutzer das Verhalten auch in einem vorm Browser und auch sämtlich anderer Software unabhängigen Programm einstellen.
        Das bedeutet, ich habe keinen Einfluss?

        kommt drauf an, was für eine Verzögerung du wirklich meinst.

        Beim Niederdrücken einer Taste wird _ein_ Tastenanschlag sofort ans Programm (hier: an den Browser) gemeldet. Wenn dieser erste Tastenanschlag bei dir schon verzögert wirkt, liegt es am Browser bzw. deinem Javascript, oder das Zeichnen, also die Anzeige der Veränderung im Browserfenster, ist sehr zeitintensiv.

        Was du nicht in der Hand hast, ist die Verzögerung vom ersten Tastenanschlag bis zum Einsetzen der automatischen Tasten-Wiederholfunktion. Die beträgt üblicherweise eine halbe Sekunde, kann aber vom Anwender nach Belieben eingestellt werden - und zwar systemweit. Auch die Wiederholgeschwindigkeit (also wie schnell hintereinander eine Taste im Repeat-Modus "gefeuert" wird) ist eine vom Anwender einstellbare Systemgröße und liegt üblicherweise zwischen 10/s und 30/s.

        So long,
         Martin

        --
        Auch mit eckigen Radios kann man Rundfunk hören.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Was du nicht in der Hand hast, ist die Verzögerung vom ersten Tastenanschlag bis zum Einsetzen der automatischen Tasten-Wiederholfunktion. Die beträgt üblicherweise eine halbe Sekunde, kann aber vom Anwender nach Belieben eingestellt werden - und zwar systemweit. Auch die Wiederholgeschwindigkeit (also wie schnell hintereinander eine Taste im Repeat-Modus "gefeuert" wird) ist eine vom Anwender einstellbare Systemgröße und liegt üblicherweise zwischen 10/s und 30/s.

          So long,
          Martin

          Also auch in meinem kleinen Codeschnipsel im ersten Post, ist diese "halbe Sekunde" spürbar. Dann liegt das wohl daran. Ich muss mir wohl ein workaround ausdenken :)

          1. Hi,

            Also auch in meinem kleinen Codeschnipsel im ersten Post, ist diese "halbe Sekunde" spürbar. Dann liegt das wohl daran. Ich muss mir wohl ein workaround ausdenken :)

            einen Strohhalm hätte ich noch ...
            Du reagierst in deinem Script auf keypress. Hast du mal keydown zusätzlich ausprobiert? - Ich bin mir im Augenblick nicht sicher, ob beim ersten Tastendruck auch schon keypress ausgelöst wird (keydown aber auf jeden Fall). Und Ausprobieren ist mir jetzt zuviel Aufwand, zumal du ein laufendes Projekt hast und ruck-zuck testen kannst.

            So long,
             Martin

            --
            Wer im Glashaus sitzt, sollte sich nur im Dunkeln ausziehen.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Du reagierst in deinem Script auf keypress. Hast du mal keydown zusätzlich ausprobiert? - Ich bin mir im Augenblick nicht sicher, ob beim ersten Tastendruck auch schon keypress ausgelöst wird (keydown aber auf jeden Fall). Und Ausprobieren ist mir jetzt zuviel Aufwand, zumal du ein laufendes Projekt hast und ruck-zuck testen kannst.

              So long,
              Martin

              Leider das gleiche Ergebnis, auch mit keydown...

  2. Hi,

    http://jsfiddle.net/D7dEQ/show/

    Ich kann keine Verzögerung erkennen.
    Allerdings Firefox 16.0.1

    Im Chrome geht's bei mir gar nicht. Aber der interessiert dich ja nicht …

    ~dave

    1. Hallo,

      http://jsfiddle.net/D7dEQ/show/
      Ich kann keine Verzögerung erkennen.
      Allerdings Firefox 16.0.1

      ich auch nicht - Firefox 17.0.1/Linux reagiert "augenblicklich", d.h. ohne wahrnehmbare Verzögerung auf jeden Tastendruck.
      Danke fürs Online-Beispiel zum Probieren!

      Ciao,
       Martin

      --
      Verliebt:    Er spricht, sie lauscht.
      Verlobt:     Sie spricht, er lauscht.
      Verheiratet: Beide sprechen, und die Nachbarn lauschen.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(