【问题标题】:Can javascript tell the difference between left and right shift key?javascript可以区分左右shift键吗?
【发布时间】:2014-03-28 13:14:36
【问题描述】:

这主要是一个健全性检查。两个 shift 键的键码都是 16。这是否意味着实际上无法区分浏览器中的左右 shift 事件?

【问题讨论】:

    标签: javascript keyboard keycode


    【解决方案1】:

    在支持DOM3 的较新浏览器中,您可以使用event.location 来检查位置。

    在the DOM3 spec中,为位置定义了4个常量DOM_KEY_LOCATION_STANDARD、DOM_KEY_LOCATION_LEFT、DOM_KEY_LOCATION_RIGHT和DOM_KEY_LOCATION_NUMPAD。

    在这种情况下,你可以这样做:

    if (event.location === KeyboardEvent.DOM_KEY_LOCATION_LEFT){
    
    } else if (event.location === KeyboardEvent.DOM_KEY_LOCATION_RIGHT){
    
    }
    

    【讨论】:

    • 你能告诉我完整的代码吗?我不知道如何执行它
    • 您可以在浏览器的键盘事件处理程序中使用它,其中事件处理程序函数的第一个参数是event。
    • 没关系。我用另一种方式做到了。 stackoverflow.com/questions/40320597/…
    • 这个答案仍然有效,但多年来在底部有一个新的好答案。
    【解决方案2】:

    您可以使用 event.code(物理键盘字符串)代替 event.key(数字 ascii 值)。

    event.code MDN docs

    KeyboardEvent.code 属性表示键盘上的物理键(与按键生成的字符相反)。

    如果您向下滚动到底部的“代码值”,您可以找到两个不同的 shift 键:

    "ShiftLeft", "ShiftRight"

    【讨论】:

      【解决方案3】:

      Internet explorer 可以通过 shiftLeft 属性区分左移和右移:

      shiftLeft property (event)

      否则,它们无法区分。

      【讨论】:

      【解决方案4】:

      最简单的方法

      $(document).ready(function(){
        $("html").keydown(function(e) {
      
            if (e.shiftKey) {
               if (event.location == 1) console.log('left shift');
               if (event.location == 2) console.log('right shift');
            }
      
        });
      });
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

      注意:当你运行代码 sn-p 来激活键盘按键时,你必须点击里面的空白。这是在 Chrome 和 Safari 中测试的。

      【讨论】:

      • 这在 Firefox 中有效,但在 Chrome 92 及更高版本(我测试过的)中它总是说“左移”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2019-08-04
      相关资源
      最近更新 更多