有没有办法检查按键输入是否按指定顺序按下?

Is There a way to check if keydown inputs are pressed in a specified sequence?

提问人:Musab Abdul Hameed Shah 提问时间:4/7/2023 更新时间:4/7/2023 访问量:42

问:

我正在尝试在我的网站中实现一个类似作弊代码的功能,如果一个人输入一个序列(如右上左下(使用箭头键)),网站的一个元素就会发生变化。

目前,我已经做了一些简单的事情,通过使用事件侦听器,我检查了 ArrowLeft、ArrowRight 等事件键,并分别添加了计数器。这里唯一的问题是它没有检查输入的顺序,所以如果按任何顺序按下键,元素就会改变。 我目前的代码是:

var i = document.getElementById("ind");
        var Ltrigger = 0, Rtrigger = 0, Utrigger = 0, Dtrigger = 0;
        document.addEventListener('keydown', function (event) {
            switch (event.key) {
                case "ArrowLeft":
                    Ltrigger++;
                    break;
                case "ArrowRight":
                    Rtrigger++;
                    break;
                case "ArrowUp":
                    Utrigger++;
                    break;
                case "ArrowDown":
                    Dtrigger++;
                    break;
            }
            if (Ltrigger == 1 && Rtrigger == 1 && Utrigger == 1 && Dtrigger == 1) {
                i.style.backgroundColor = 'aqua'
                i.innerHTML = "<h3>SUCCESS</h3>"
            }
        })
JavaScript 输入

评论

0赞 epascarello 4/7/2023
将它们推送到数组中并检查数组中的顺序。
0赞 epascarello 4/7/2023
npmjs.com/package/hotkeys-js

答:

0赞 ProfDFrancis 4/7/2023 #1

到目前为止,按顺序保留键的累积数组或字符串

const i = document.getElementById("ind");
const sequenceElement = document.getElementById("sequence");

var keys = "";

document.addEventListener('keydown', event => {
  keys += " " + event.key
  sequenceElement.innerHTML="You have pressed:\n"+keys;
  
  if (keys.endsWith(" ArrowUp ArrowDown ArrowLeft ArrowRight")) {
    i.style.backgroundColor = 'aqua'
    i.innerHTML = "<h3>SUCCESS</h3>"
  }
})
<div id="ind">
  Press arrows in this sequence: up, down, left, right.
</div>

<br>

<div id="sequence">
Sequence of keypresses will appear here. This is just for your understanding - remove it in your final program.
</div>

评论

1赞 Musab Abdul Hameed Shah 4/9/2023
正是我想要的。谢谢!