मुझे नहीं लगता कि आप सीधे कैनवास पर कीबोर्ड ईवेंट श्रोता जोड़ सकते हैं। यदि आप विंडो स्तर पर ईवेंट हैंडलर पंजीकृत नहीं करना चाहते हैं तो मुझे लगता है कि आप एक 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!");
});
एक और दिलचस्प तरीका कैनवास टैग पर टैबइंडेक्स का उपयोग करना और कैनवास पर कुंजीपटल बांधना है। मैंने 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();
स्रोत
2011-09-30 17:22:19
पहले यह मेरे लिए काम नहीं करता था, लेकिन जब मैं div/canvas पर माउस-क्लिक करता हूं, तो यह आग लग जाता है। मुझे लगता है कि यह एक फोकस मुद्दा है। संपादित करें - हाँ, [यह उत्तर] (http://stackoverflow.com/a/57332/78409) बताता है कि कैसे कैनवास पर ध्यान केंद्रित करना है। –