Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/jQuery按键记录_Javascript_Jquery - Fatal编程技术网

Javascript/jQuery按键记录

Javascript/jQuery按键记录,javascript,jquery,Javascript,Jquery,我希望能够将按键记录在特定页面上,尝试实现一个“复活节彩蛋”类型的功能,当按正确的顺序按下正确的按键时,它会触发事件 有人能给我一些提示吗?我以前用过这个代码,用上/下箭头滚动列表,扩展它来检查某个键组合应该相对容易 $("#SearchInput").keydown(function(e){ switch(e.which) { // User pressed "up" arrow case 38: navigate('up'); break;

我希望能够将按键记录在特定页面上,尝试实现一个“复活节彩蛋”类型的功能,当按正确的顺序按下正确的按键时,它会触发事件


有人能给我一些提示吗?

我以前用过这个代码,用上/下箭头滚动列表,扩展它来检查某个键组合应该相对容易

$("#SearchInput").keydown(function(e){
  switch(e.which) { 
     // User pressed "up" arrow
     case 38:
        navigate('up');
     break;
     // User pressed "down" arrow
     case 40:
        navigate('down');
     break;
     // User pressed "enter"
     case 13:
        if(currentUrl != '') {
           window.location = currentUrl;
        }
     break;
  }
使用:

这将捕获整个页面上的按键,而不仅仅是特定元素


详细介绍如何捕获CTRL+键快捷键。

我不确定确切的按键代码,我借用了Hans Kov的答案。我会使用一个类似于堆栈的数组,只需将一个新的按键按到堆栈上,然后弹出它们以检查顺序是否正确

<script type="text/javascript>

var keypresses = [];
  $(document).ready(function() {
    body.bind('keypress', function(event) {
      switch(event.keyCode) {
        case 40:
          keypresses.push('down');
        break;
        case 38:
          keypresses.push('up');
      }

      checkForEasterEgg(keypresses);
    });
  });

  function checkForEasterEgg(keyArray) {
    var length = keyArray.length;
    for(var i = 0; i < length; i++) {
      // using keyArray.pop(), check if order matches up up down down left right left right b a
      if (easterEggPassed) {
        console.log('30 lives, woohoo!');
      }
    }
  }
</script>

在这种情况下,检查ctl/alt/shift键也可能有用:

if (e.altKey) {
}

if (e.ctrlKey) {
}

if (e.shiftKey) {
}
对于按键代码,以下对象文字应有帮助:

var Key =
{
    BACKSPACE: 8,
    TAB: 9,
    ENTER: 13,
    ESC: 27,
    PAGEUP: 33,
    PAGEDOWN: 34,
    END: 35,
    HOME: 36,
    LEFT: 37,
    UP: 38,
    RIGHT: 39,
    DOWN: 40,
    HELP: 47,
    H: 72,
    K: 75,
    N: 78,
    R: 82,
    NUMERIC_PLUS: 107,
    F1: 112,
    F2: 113,
    F3: 114,
    F4: 115,
    F5: 116,
    F6: 117,
    F7: 118,
    F8: 119,
    F9: 120,
    F10: 121,
    F11: 122,
    F12: 123,
    PLUS: 187,
    MINUS: 189,
    V: 86
}
因此,不是:

  switch(event.keyCode) { 
    case 40: 
      keypresses.push('down'); 
    break; 
    case 38: 
      keypresses.push('up'); 
  } 
我们可以说:

switch(event.keyCode) { 
    case Key.DOWN: 
        keypresses.push('down'); 
        break; 
    case Key.UP: 
        keypresses.push('up'); 
        break; 
} 

这促进了代码的自文档化,并且更具可读性和可维护性。

好吧,即使另一个答案已经被接受,我还是要抛出一个答案

$(document).ready(function() {

    var easterEgg = 'egg';
    var eggLength = easterEgg.length;
    var keyHistory = '';
    var match;
        $(document).keypress(function(e) {
            keyHistory += String.fromCharCode(e.which)
            match = keyHistory.match(easterEgg); 
            if(match) {
                alert(match);
                keyHistory = match =  '';
            } else if (keyHistory.length > 30) {
                keyHistory = keyHistory.substr((keyHistory.length - eggLength - 1));
            }
        });
});
当您最终键入“egg”(在本例中)时,您将收到警报,并且按键历史记录将重置


编辑:更新代码以在字符串过长时截断字符串。

这里有一种简单的方法,可以在用户输入字符序列时要求按住ctrl键。比一些回答简单一点。在以下情况下,按住ctrl键同时键入“嘎嘎”(无引号)将触发警报。有人,总有一天

     var easterEgg = [81, 85, 65, 67, 75]; //quack
     var eggLength = easterEgg.length;
     var currentPosition = 0;
     $(document).keydown(function (e) {
         if (e.ctrlKey && e.keyCode == easterEgg[currentPosition]) {
             e.preventDefault();
             if (++currentPosition == eggLength) {
                 currentPosition = 0;
                 alert('oh yeah, right there');
             }
         } else {
             currentPosition = 0;
         }
     });

这可能吗?

var seq = "rainbow"
var input = ""
window.addEventListener("keypress", function(e) {
    input += String.fromCharCode(e.keyCode)

    for (var i = 0; i < seq.length; i++) {
        if (input[i] != seq[i] && input[i] != undefined) {
            input = ""
        }
    }

    if (input == seq) {
        alert("EASTER EGG!")

        input = ""
    }
})
var seq=“彩虹”
var input=“”
window.addEventListener(“按键”,功能(e){
输入+=String.fromCharCode(e.keyCode)
对于(变量i=0;i
回答得不错。尽管如此,根据我下面的回答,我总是发现直接使用文字(例如40、38)更好地被某种常量/对象文字所取代。因此,我调整了我的答案。
var seq = "rainbow"
var input = ""
window.addEventListener("keypress", function(e) {
    input += String.fromCharCode(e.keyCode)

    for (var i = 0; i < seq.length; i++) {
        if (input[i] != seq[i] && input[i] != undefined) {
            input = ""
        }
    }

    if (input == seq) {
        alert("EASTER EGG!")

        input = ""
    }
})