【问题标题】:onkeydown event not working on canvas?onkeydown 事件在画布上不起作用?
【发布时间】:2015-10-05 02:39:35
【问题描述】:

我有一个画布和一个分配给它的onkeydown 事件。当 any 键被按下时,控制台应该记录该键的 keyCode。但它没有输出任何东西,甚至没有undefined。像onclick 这样的其他处理程序工作正常,但onkeydown 不是。我也尝试过使用onkeypressonkeyup,但这些也不起作用。这是完整的代码:

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

【问题讨论】:

  • 你在哪个浏览器中测试这个?
  • @jsh Google Chrome,最新版本。
  • 如果焦点在元素内部,keydown 会触发,猜测是它没有聚焦,你应该听窗口的按键。
  • @epascarello 谢谢!完美运行!

标签: javascript canvas event-handling keycode onkeydown


【解决方案1】:

如果使用canvas.onkeydown,请使用window.onkeydown,否则您需要将注意力集中在画布上才能正常工作。

window.onkeydown = function() {};

仅当您专注于该元素时,附加到画布元素才会起作用。 window 对象就是整个浏览器。

【讨论】:

  • 谢谢。但是如果用户点击它,元素不应该得到焦点吗?
  • @aCodingN00b Html5 画布是最初没有选项卡设置的元素之一,因此它不会获得焦点。您可以通过简单地为画布分配一个 tabindex 来更改它——然后它会在点击时获得焦点。 ;-)
猜你喜欢
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多