Zusammenfassung
Verhindern Sie einfach die Standard- Browseraktion:
window.addEventListener("keydown", function(e) {
// space and arrow keys
if([32, 37, 38, 39, 40].indexOf(e.keyCode) > -1) {
e.preventDefault();
}
}, false);
Ursprüngliche Antwort
Ich habe die folgende Funktion in meinem eigenen Spiel verwendet:
var keys = {};
window.addEventListener("keydown",
function(e){
keys[e.keyCode] = true;
switch(e.keyCode){
case 37: case 39: case 38: case 40: // Arrow keys
case 32: e.preventDefault(); break; // Space
default: break; // do not block other keys
}
},
false);
window.addEventListener('keyup',
function(e){
keys[e.keyCode] = false;
},
false);
Die Magie passiert in e.preventDefault();
. Dadurch wird die Standardaktion des Ereignisses blockiert. In diesem Fall wird der Ansichtspunkt des Browsers verschoben.
Wenn Sie den aktuellen Schaltflächenstatus nicht benötigen, können Sie keys
die Standardaktion auf den Pfeiltasten einfach löschen und verwerfen:
var arrow_keys_handler = function(e) {
switch(e.keyCode){
case 37: case 39: case 38: case 40: // Arrow keys
case 32: e.preventDefault(); break; // Space
default: break; // do not block other keys
}
};
window.addEventListener("keydown", arrow_keys_handler, false);
Beachten Sie, dass Sie mit diesem Ansatz den Ereignishandler später auch entfernen können, wenn Sie das Scrollen mit der Pfeiltaste wieder aktivieren müssen:
window.removeEventListener("keydown", arrow_keys_handler, false);
Verweise
lC.keys
anstelle deskeys
Keyup-Listeners verwendet habe. Dies wurde behoben und in Firefox und Chrome getestet. Beachten Sie, dass alle Änderungenkeys
optional sind, aber da Sie ein Spielkeydown
und nichtkeyup
.Aus Gründen der Wartbarkeit würde ich den "blockierenden" Handler an das Element selbst anhängen (in Ihrem Fall an die Zeichenfläche).
Warum nicht einfach machen
window.event.preventDefault()
? MDN- Zustände:Weitere Lesungen:
quelle