2012-10-14 10 views
38

Sto provando a creare un'app canvas che risponda all'input di tastiera e mouse. Ho questo codice:addEventListener per il keydown su Canvas

canvas = document.getElementById('canvas'); 
canvas.addEventListener('mousedown', function(event) { 
    alert('mousedown'); 
     }, false); 
canvas.addEventListener('keydown', function(event) { 
    alert('keydown'); 
     }, false); 

L'allarme 'mousedown' esce ogni volta che si fa clic sul mouse, ma vigile il 'keydown' non viene mai in su. Lo stesso codice funziona bene su JS Bin: http://jsbin.com/uteha3/66/

Perché non funziona sulla mia pagina? La tela non riconosce l'input da tastiera?

+4

Si puo' t focalizzare un elemento di tela. –

+3

'keydown' è probabilmente attivato sul canvas solo se è attivo. Non sono sicuro che un elemento canvas possa avere il focus su tutti. –

risposta

47

Modifica - Questa risposta è una soluzione, ma un approccio molto più semplice e corretto sarebbe impostando l'attributo tabindex sull'elemento tela (come suggerito da hobberwickey).

Non è possibile mettere a fuoco un elemento di tela. Un semplice lavoro su questo, sarebbe quello di rendere il tuo "proprio" focus.

var lastDownTarget, canvas; 
window.onload = function() { 
    canvas = document.getElementById('canvas'); 

    document.addEventListener('mousedown', function(event) { 
     lastDownTarget = event.target; 
     alert('mousedown'); 
    }, false); 

    document.addEventListener('keydown', function(event) { 
     if(lastDownTarget == canvas) { 
      alert('keydown'); 
     } 
    }, false); 
} 

JSFIDDLE

+1

funziona come un fascino ... grazie amico per la soluzione migliore. –

+1

vecchia risposta, ma anche nel 2012 è assolutamente possibile: è necessario dare alla tela un 'tabindex =" "' e presto: la tua tela (ma davvero * qualsiasi * elemento HTML) ora funziona bene con lo stato attivo. Questa risposta non dovrebbe essere contrassegnata come corretta, con la risposta di hobberwickey accettata. –

+0

Sono d'accordo con te, ma per qualsiasi motivo @Cbas non ha mai accettato risposta hobberwickeys. Ho aggiornato il mio post per i futuri visitatori per risolvere questo problema. –

86

Impostare la tabindex dell'elemento tela per 1 o qualcosa di simile

<canvas tabindex='1'></canvas> 

E 'un vecchio trucco per fare qualsiasi elemento attivabile

+1

Anche questo funziona. – Cbas

+0

Non funziona, almeno nell'ultimo chrome. –

+5

Scommetto un milione di dollari che fa http://jsfiddle.net/WJhGr/1/ – hobberwickey

Problemi correlati