Resumen
Simplemente evite la acción predeterminada del navegador:
window.addEventListener("keydown", function(e) {
if([32, 37, 38, 39, 40].indexOf(e.keyCode) > -1) {
e.preventDefault();
}
}, false);
Respuesta original
Usé la siguiente función en mi propio juego:
var keys = {};
window.addEventListener("keydown",
function(e){
keys[e.keyCode] = true;
switch(e.keyCode){
case 37: case 39: case 38: case 40:
case 32: e.preventDefault(); break;
default: break;
}
},
false);
window.addEventListener('keyup',
function(e){
keys[e.keyCode] = false;
},
false);
La magia ocurre en e.preventDefault();. Esto bloqueará la acción predeterminada del evento, en este caso mover el punto de vista del navegador.
Si no necesita los estados del botón actual, simplemente puede soltar keysy descartar la acción predeterminada en las teclas de flecha:
var arrow_keys_handler = function(e) {
switch(e.keyCode){
case 37: case 39: case 38: case 40:
case 32: e.preventDefault(); break;
default: break;
}
};
window.addEventListener("keydown", arrow_keys_handler, false);
Tenga en cuenta que este enfoque también le permite eliminar el controlador de eventos más adelante si necesita volver a habilitar el desplazamiento de la tecla de flecha:
window.removeEventListener("keydown", arrow_keys_handler, false);
Referencias