【问题标题】:Attach keyboard events to html5 canvas将键盘事件附加到 html5 画布
【发布时间】:2011-09-30 16:38:04
【问题描述】:

看起来mouse events 可以将侦听器添加到canvas 元素,但keyboard events 似乎不适用于canvas 元素。

示例: http://jsfiddle.net/H8Ese/1/

浏览器: 铬 14.0 FF 5.0.1

我知道我可以使用文档级侦听器,但我正在尝试首先获取 Canvas 元素(以便您的键盘在页面上的其他任何地方都可以使用)。

关于如何在画布元素上监听关键事件有什么想法吗?

【问题讨论】:

    标签: html5-canvas dom-events addeventlistener


    【解决方案1】:

    我认为您不能将键盘事件侦听器直接添加到画布。如果您不想在窗口级别注册事件处理程序,那么我认为您可以将画布包装在 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!");
    });
    

    另一种有趣的方法是在画布标签上使用 tabIndex 并在画布上绑定按键。我已经更新了 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 上单击鼠标时,它就会触发。估计是焦点问题。编辑 - 是的,this answer 解释了如何聚焦画布。
    猜你喜欢
    • 1970-01-01
    • 2016-12-01
    • 2013-12-09
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2014-06-08
    相关资源
    最近更新 更多