代码之家  ›  专栏  ›  技术社区  ›  Steve Hanov

如何使用jquery为HTML画布提供键盘焦点?

  •  13
  • Steve Hanov  · 技术社区  · 16 年前

    我正在使用Javascript、jquery和Canvas标记实现一个游戏。当画布标记具有焦点时,如何防止浏览器处理键盘快捷键?我尝试了event.stopPropagation(),但没有效果。

    我可以拿起键盘事件。但是,当用户按下空格键时,网页会在Firefox中向下滚动。箭头键也会发生同样的情况。

    2 回复  |  直到 16 年前
        1
  •  33
  •   Xavi Arik G    14 年前

    根本问题是默认情况下浏览器不会使画布“可聚焦”。我能想到的最好的解决办法是设置 tabindex

    $("#canvas")
        // Add tab index to ensure the canvas retains focus
        .attr("tabindex", "0")
        // Mouse down override to prevent default browser controls from appearing
        .mousedown(function(){ $(this).focus(); return false; }) 
        .keydown(function(){ /* ... game logic ... */ return false; });
    

    如果出于任何原因,你不能设置 ,也可以通过设置 contentEditable 事实上:

    // Add content editable to help ensure the canvas retains focus
    $("#canvas").attr("contentEditable", "true")
    $("#canvas")[0].contentEditable = true;
    

    TAB顺序 选项

    另一个需要考虑的是浏览器倾向于用边框勾勒出内容可编辑的元素。这可能会让一些用户感到不快。幸运的是,您可以使用以下css摆脱它:

    #canvas { outline: none; }
    

    我在WindowsXP、MacOSX和Linux上用Chrome3/4/5和Firefox3.0/3.5/3.6测试了这两种解决方案。下面是一个工作示例: http://xavi.co/static/so-canvas-keyboard.html

        2
  •  3
  •   Caleb    16 年前

    尝试 event.preventDefault(); . 还有 keypress , keydown ,及 keyup