2015-10-04 6 views
0

J'ai un canevas et un événement onkeydown qui lui est assigné. Lorsque une touche est enfoncée, la console est censée enregistrer le code clé de la clé. Mais il ne sort rien, même pas undefined. D'autres gestionnaires comme onclick fonctionnent bien, mais pas onkeydown. J'ai également essayé d'utiliser onkeypress et onkeyup, mais ceux-ci ne fonctionnent pas non plus. Voici le code complet:onkeydown événement ne fonctionne pas sur la toile?

canvas.onkeydown = function(e){ 
    if(e.keyCode === 37){ 
     ctx.clearRect(0,0,canvas.width,canvas.height); 
     ctx.drawImage(knife,knifeX - 10, knifeY); 
     knifeX -= 10; 
    } 
    else if(e.keyCode === 39){ 
     ctx.clearRect(0,0,canvas.width,canvas.height); 
     ctx.drawImage(knife,knifeX + 10, knifeY); 
     knifeX += 10;   
    } 
    else if(e.keyCode === 38){ 
     ctx.clearRect(0,0,canvas.width,canvas.height); 
     ctx.drawImage(knife,knifeX, knifeY + 10); 
     knifeY += 10; 
    } 
    else if(e.keyCode === 40){ 
     ctx.clearRect(0,0,canvas.width,canvas.height); 
     ctx.drawImage(knife,knifeX, knifeY - 10); 
     knifeY -= 10;    
    } 
    console.log(e.keyCode);  
} 
+0

Dans quel navigateur travaillez-vous actuellement? – jsh

+0

@jsh Google Chrome, dernière version. –

+0

Eh bien le clavier se déclenchera si le focus est à l'intérieur de l'élément, en supposant qu'il ne soit pas focalisé et que vous devriez écouter la fenêtre pour la frappe. – epascarello

Répondre

1

Au lieu de cela si vous utilisez canvas.onkeydown utiliser window.onkeydown sinon vous aurez besoin de se concentrer sur la toile pour que cela fonctionne.

window.onkeydown = function() {};

Fixation à l'élément de toile ne fonctionnera que si votre concentré dans sur cet élément. L'objet fenêtre est l'ensemble du navigateur.

+0

Merci. Mais l'élément ne devrait-il pas se concentrer si l'utilisateur clique dessus? –

+2

@ aCodingN00b Le canevas Html5 est l'un de ces éléments qui, au départ, n'a pas de paramètre de tabulation, donc il ne recevra pas le focus. Vous pouvez changer cela en assignant simplement un canvas à un tabindex - alors il reçoit le focus sur click. ;-) – markE