onkeydown 事件在画布上不起作用?

问题描述 投票:0回答:1

我有一个画布和一个分配给它的

onkeydown
事件。当按下任意键时,控制台应该记录该键的 keyCode。但它没有输出任何东西,甚至没有输出undefined。其他处理程序(如
onclick
)工作正常,但
onkeydown
则不然。我也尝试过使用
onkeypress
onkeyup
,但这些也不起作用。这是完整的代码:

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); }


javascript canvas event-handling keycode onkeydown
1个回答
4
投票
canvas.onkeydown

,而是使用

window.onkeydown
,否则您将需要聚焦画布才能使其工作。

window.onkeydown = function() {};

仅当您专注*该元素时,将事件侦听器附加到画布元素才会起作用。窗口对象是整个浏览器。

*

<canvas>

元素需要

tabindex
 属性才能接收焦点。

© www.soinside.com 2019 - 2024. All rights reserved.