0

我正在开发一个 html5 画布游戏,并且正在使用 document.onkeydown 来测试输入。但是,我想在 onkeydown 中添加一个检查,以确保没有选择任何表单元素,尤其是聊天框。我该如何检查?

这是我的 onkeydown 代码

document.onkeydown = function(event) {
                var keyCode;

                if(event == null)
                {
                    keyCode = window.event.keyCode;
                }
                else
                {
                    keyCode = event.keyCode;
                }
                var message = {
                    'msgId': 4
                };

                switch(keyCode)
                {
                    // left
                    case 65:
                        message['move'] = 0;
                        connection.send(JSON.stringify(message));
                        break;

                    // up
                    case 87:
                        message['move'] = 1;
                        connection.send(JSON.stringify(message));
                        break;

                    // right
                    case 68:
                        message['move'] = 2;
                        connection.send(JSON.stringify(message));
                        break;

                    // down
                    case 83:
                        message['move'] = 3;
                        connection.send(JSON.stringify(message));
                        break;

                    default:
                    break;
                }
            }
4

1 回答 1

1

通常一个 html Canvas 不接收它自己的键盘事件。

但是如果你给画布一个tabindex,它就会收到自己的键盘事件。

    // set canvas to be a tab stop (necessary to get keydown events)

    myCanvas.setAttribute('tabindex','0');

然后,您可以专门在画布上而不是窗口上侦听关键事件。

    // have handleKeydown handle keydown events on the canvas

    myCanvas.addEventListener('keydown',handleKeydown,false);

与所有文本输入元素一样,用户必须单击画布以使其获得焦点。

但是,你可以强制画布有焦点

    // set focus to the canvas so keystrokes are immediately handled

    canvas.focus();

[加法-确定是否在输入元素中引发了键事件]

如果您想确定哪个元素引发了关键事件,您可以检查引发的事件的 event.target.tagName 属性。

document.onkeydown = function(event) {

    // if the key occurred in an input element...just exit 

    if(event.target.tagName=="INPUT"){ return; }

    // the keystroke wasn't in an input element, do your stuff!

    ...
于 2013-09-15T16:11:37.267 回答