Il problema di root è che per impostazione predefinita il browser non rende "selezionabile" la tela. La soluzione migliore che potrei venire in mente è di impostare la tabindex
sulla tela:
$("#canvas")
// Add tab index to ensure the canvas retains focus
.attr("tabindex", "0")
// Mouse down override to prevent default browser controls from appearing
.mousedown(function(){ $(this).focus(); return false; })
.keydown(function(){ /* ... game logic ... */ return false; });
Se per qualsiasi motivo non è possibile impostare la tabindex
, si può anche fare la tela "attivabile" impostando contentEditable
true :
// Add content editable to help ensure the canvas retains focus
$("#canvas").attr("contentEditable", "true")
$("#canvas")[0].contentEditable = true;
Questa è la soluzione mi è venuta in origine, ma a mio parere è un po 'hackier rispetto all'opzione tabindex
.
Un'altra cosa da considerare è che i browser tendono a delineare gli elementi modificabili del contenuto con un bordo. Questo può essere scoraggiante per alcuni utenti. Fortunatamente, è possibile sbarazzarsi di esso con questo po 'di css:
#canvas { outline: none; }
Ho provato entrambe le soluzioni in Chrome 3/4/5 e Firefox 3.0/3.5/3.6 da Windows XP, Mac OSX e Linux. Ecco un esempio funzionante: http://xavi.co/static/so-canvas-keyboard.html
Woot. Questa sembra essere la soluzione corretta. Per me va bene. Anche se fai attenzione a come lo usi, potresti inavvertitamente disabilitare altre utili scorciatoie da tastiera nel processo. –