키보드 이벤트 수신기를 캔버스에 직접 추가 할 수 있다고 생각하지 않습니다. 창 수준에 이벤트 처리기를 등록하지 않으려면 div 안에 캔버스를 래핑하고 div에 키보드 이벤트를 등록 할 수 있다고 생각합니다.
<div id="canvasWrapper" style="border:1px solid; width:600px; height:400px;">
<canvas id="canvas" width="600" height="400" >
Could not create Canvas!
</canvas>
</div>
jQuery("#canvasWrapper").keypress(function(e){
keys[e.keyCode] = true;
alert("key pressed!");
});
또 다른 흥미로운 방법은 canvas 태그에 tabIndex를 사용하고 캔버스에 keypress를 바인딩하는 것입니다. jsfiddle에서 코드를 업데이트했으며, 향후 참조 할 때도 여기에 붙여 넣습니다.
<canvas id="my-canvas" tabindex="1"></canvas>
$("#my-canvas").bind({
keydown: function(e) {
var key = e.keyCode;
var elem=document.getElementById("my-canvas");
var context=elem.getContext("2d");
context.font = "bold 20px sans-serif";
context.clearRect(0,0,300,200);
context.fillText("key pressed " + key, 10,29);
},
focusin: function(e) {
$(e.currentTarget).addClass("selected");
},
focusout: function(e) {
$(e.currentTarget).removeClass("selected");
}
});
$("#my-canvas").focus();
처음에는이 기능이 작동하지 않았지만 div/canvas를 마우스로 클릭하면 작동합니다. 나는 그것이 초점 문제라고 생각하고있다. 편집 - 예, [이 답변] (http://stackoverflow.com/a/57332/78409) 캔버스를 집중하는 방법에 대해 설명합니다. –