如何检测多个(组合)键盘按?

时间:2017-03-10 03:05:21

标签: javascript jquery

我发现这段代码很有趣,因为每次我按下键盘上的一个键都会发出警报。但是如何使用组合

检测密钥

示例

  1. Alt + 1 - 我想提醒一些事情
  2. Alt + 2 - 同样在这里
  3. ETC。我想要的任何组合。

    我尝试他的代码并为其创建一个if语句

    
    
    $(document).keypress(function(event){
      alert(String.fromCharCode(event.which)); 
     if( String.fromCharCode(event.which) == "a"){
     	alert("Hi A.");
     }
    });
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    &#13;
    &#13;
    &#13;

    归功于 Coyod

1 个答案:

答案 0 :(得分:1)

如果您将事件更改为keydown,您将获得额外的事件数据,告诉您是否按下了任何修改键。

然后在事件回调中,您可以检查event.altKey以检查当前是否按下了alt键。

$(document).keydown(function(event) {
  if (event.altKey) {
    switch (String.fromCharCode(event.which)) {
      case 'A':
        console.log('Hi A')
        break
      case 'B':
        console.log('Hi B')
        break
    }
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

这是一个更好的示例,它将保持所有按键的状态,允许您测试是否同时按下多个键。在回调中你有一个函数checkKeysPressed,它接受​​你希望添加事件的键,如果按下这些键,函数将返回true。

它使用ES6语法,函数和对象,但它可以很容易地转换为ES5,或者只是通过babel运行。

const multipleKeysEventListener = (element, callback) => {
  
  const keysPressed = new Set
  
  const describeKey = e => {
    switch(e.which) {
      case 18:
        return 'ALT'
      case 16:
        return 'SHIFT'
      default:
        return String.fromCharCode(e.which)
    }
  }
  
  const checkPressedKeys = (...keys) =>
    keys.every(x => 
      keysPressed.has(
        typeof(x) === 'number'
          ? String.fromCharCode(x)
          : x
      )
    )
  
  const down = e => {
    keysPressed.add(describeKey(e))
    return callback(checkPressedKeys, e)
  }
  
  const up = e => {
    keysPressed.delete(describeKey(e))
  }
  
  $(element).keydown(down)
  $(element).keyup(up)
}

multipleKeysEventListener(document, (checkKeysPressed, e) => {
  switch (true) {
    // you can pass keys
    case checkKeysPressed('A', 'B'):
      console.log('A and B pressed')
      break
    // you can pass modifiers
    case checkKeysPressed('ALT', 'A'):
      console.log('ALT and A pressed')
      break
    // and you can pass keyCodes
    case checkKeysPressed('ALT', 67):
      console.log('ALT and C pressed')
      break
    default:
      console.log(String.fromCharCode(e.which))
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>