简体   繁体   English

javascript获取键盘keydown和keyup输入

[英]javascript get keyboard keydown and keyup input

I want to send server when client does keydown or keyup. 我想在客户端进行键盘按下或键盘输入时发送服务器。

However, sometimes It doesn't work well. 但是,有时效果不佳。 It misses some event and "keyboard array" doesn't [] when I leave my hands to keyboard. 当我将手放在键盘上时,它会丢失某些事件,并且“ [keyboard array]”不会[]。

I maked "keyboard array" to find duplicate input, and when window is not focused I initialized it. 我制作了“键盘数组”以查找重复的输入,并且当窗口未聚焦时,我对其进行了初始化。 Here's my code. 这是我的代码。

var keyarr = [];
window.onkeyup = function(e){
    if(keyarr.indexOf(e.keyCode) != -1) {
            //delete keyCode
        keyarr.splice(keyarr.indexOf(e.keyCode),1);
            //websocket.send(keycode);
    }
}
window.onkeydown = function(e){
      //check keyCode available
      if(!e.repeat && keyarr.indexOf(e.keyCode) == -1) {
            //add keyCode
            keyarr.push(e.keyCode);
            //websocket.send(keycode);
      }
}
window.onblur = function(){
      keyarr = [];
      //websocket.send(keycode);
}

Why some keydown and keyup event doesn't delivered well? 为什么某些keydown和keyup事件无法很好地传递?

To answer your question: 要回答您的问题:

It can be due to WI-FI connections or computer performance. 这可能是由于WI-FI连接或计算机性能所致。 But I'll try to help you optimize your code a bit to make it work better 但我会尽力帮助您优化代码以使其更好地工作

Let's get couple thing out of the way: 让我们摆脱一些麻烦:

  • WTH is your dict variable and what does it represent. WTH是您的dict变量,它代表什么。 Please be more explicit 请更明确
  • The sections: 这些部分:

    dict[e.keyCode] != undefined dict [e.keyCode]!=未定义

    Can be replaced with: 可以替换为:

    dict[e.keyCode] dict [e.keyCode]

  • In this section: 在这个部分:

    if(dict[e.keyCode] != undefined && keyarr.indexOf(e.keyCode) != -1) { if(dict [e.keyCode]!=未定义&& keyarr.indexOf(e.keyCode)!= -1){
    //delete keyCode //删除keyCode
    keyarr.splice(keyarr.indexOf(e.keyCode),1); keyarr.splice(keyarr.indexOf(e.keyCode),1);
    } }

    You're looking up the index of the keycode in the array TWICE. 您正在数组TWICE中查找键码的索引。 Store keyarr.indexOf(e.keyCode) in a local variable keyarr.indexOf(e.keyCode)存储在本地变量中

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM