jQuery检测键击并相应地设置变量

sad*_*ave 8 variables jquery keystroke reset

我在我的代码中创建了一个基本的EasterEgg,以便在使用以下代码进行以下击键时(不同时)激活Enter + c + o + l + o + r + s:

isEnter = 0; isC = 0; isO = 0; isL = 0; isR = 0; isS = 0;
$(window).keydown(function(e){
    if(e.which==13) isEnter = 1; if(e.which==67) isC = 1; if(e.which==79) isO = 1; 
    if(e.which==76) isL = 1; if(e.which==82) isR = 1; if(e.which==83) isS = 1;
    ColorMap();
});

function ColorMap(){
  if(isEnter==1 && isC==1 && isO==1 && isL==1 && isR==1 && isS==1){
     //DO FUNCTION//
     isEnter = 0; isC = 0; isO = 0; isL = 0; isR = 0; isS = 0; //SET VARS BACK TO 0
  };
};
Run Code Online (Sandbox Code Playgroud)

我需要向keydown函数添加重置功能,以便在按下除了那些键以外的其他内容时重置所有变量...这样他们必须按下Enter + c + o + l + o + r + s或者语句被重置并且它们必须重新启动...(这将使'EasterEgg'难以达到[或至少不太可能通过侥幸或随机击键获得]).

End*_*ssa 13

您也想按顺序检查这些.现在,你可以按任意顺序按键,然后激活复活节彩蛋.Enter + lorocs例如.

我会按顺序存储您要查找的值,如下所示:

//       Enter, c, o, l, o, r, s
var keys = [13,67,79,76,79,82,83];
Run Code Online (Sandbox Code Playgroud)

然后,您可以跟踪用户在序列中的位置:

var nextKey = 0;
$(window).keydown(function(e){
    var key = e.which;
    if (key === keys[nextKey])
        nextKey++;

    ColorMap();
});
Run Code Online (Sandbox Code Playgroud)

nextKey每次匹配序列中要查找的下一个键时,这将递增.该nextKey变量在开始的0指数,这意味着我们开始寻找Enter.现在,我们需要检查ColorMap函数中的结束条件.

function ColorMap() {
  var maxKeyIndex = keys.length - 1;
  if(nextKey >= maxKeyIndex) {
     //DO FUNCTION//

     nextKey = 0;
  }
}
Run Code Online (Sandbox Code Playgroud)

此解决方案应允许您更改keys变量中的特殊序列,而无需在代码中的其他位置进行更改.

编辑: 如果您希望答案是连续的,就像您可能那样,那么您可以nextKey在匹配失败时重置变量.

if (key === keys[nextKey])
    nextKey++;
else
    nextKey = 0;
Run Code Online (Sandbox Code Playgroud)

为了额外的功劳,您可以将其切换为使用字符串来保存复活节彩蛋,然后String.fromCharCode将其转换为e.which返回的字符代码.