jQuery обнаруживает нажатия клавиш и соответственно устанавливает переменные - PullRequest
8 голосов
/ 02 марта 2010

Я создал элементарное пасхальное яйцо в своем коде, чтобы активировать его при следующих нажатиях клавиш (не одновременно) 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
  };
};

Мне нужно добавить функцию сброса в функцию keydown, чтобы сбросить все переменные, если что-то кроме этих клавиш нажимается ... таким образом, они должны нажать Enter + c + o + l + o + r + s или оператор сбрасывается, и они должны начинаться заново .. . (это затруднит доступ к «EasterEgg» [или, по крайней мере, с меньшей вероятностью попадания по случайному или случайному нажатию клавиши]).

Ответы [ 4 ]

13 голосов
/ 02 марта 2010

Вы также хотите проверить их по порядку. Прямо сейчас вы можете нажать клавиши в любом порядке и при этом активировать пасхальное яйцо. Enter + lorocs например.

Я бы сохранял значения, которые вы ищете, в следующем порядке:

//       Enter, c, o, l, o, r, s
var keys = [13,67,79,76,79,82,83];

Затем вы можете просто отслеживать, где находится пользователь в последовательности:

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

    ColorMap();
});

Это будет увеличивать nextKey каждый раз, когда вы соответствуете следующей клавише, которую вы ищете в последовательности. Переменная nextKey начинается с индекса 0, что означает, что мы начинаем искать Enter. Теперь нам нужно проверить конечное условие в функции ColorMap.

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

     nextKey = 0;
  }
}

Это решение должно позволить вам изменить специальную последовательность в переменной keys, не требуя изменения в другом месте кода.

EDIT: Если вы хотите, чтобы ответ был непрерывным, как вы, вероятно, делаете, то вы можете сбросить переменную nextKey, когда совпадение не удастся.

if (key === keys[nextKey])
    nextKey++;
else
    nextKey = 0;

Для дополнительного кредита вы можете переключить его, чтобы использовать строку для хранения пасхального яйца, а затем String.fromCharCode, чтобы преобразовать ее в код символа, который возвращает e.which.

3 голосов
/ 02 марта 2010

Я недавно ответил на похожий вопрос о пасхальном яйце, поэтому я просто укажу вам на него.

Он отличается от того, что вы делаете, и его не нужно сбрасывать.

Регистрация Javascript / jQuery Keypress

РЕДАКТИРОВАТЬ: Вот обновленная версия, которая предотвращает слишком длинную историю ключей.

$(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));
            }
        });
});
0 голосов
/ 02 марта 2010

Вот еще один подход:

<script type="text/javascript">
$(function() {
  $(window).keypress(function(e) {
    var input = $("#input");
    input.val(function(i, v) { return v + String.fromCharCode(e.which) });

    if(input.val().indexOf('colors') > -1) {
      alert('Easter Egg');
      input.val('');
    } 
    else if('colors'.indexOf(input.val())) {
      //Clear value, they've hit another key
      input.val('');
    }        
  });
 });
</script>
<input id="input" type="text" />

Он отслеживает текущую часть цветов, набранных вами в текстовом поле, для удобства отладки, просто добавьте style="display: none;", когда закончите тестирование.

0 голосов
/ 02 марта 2010

Ну, в настоящее время вы позволите своим пользователям нажимать волшебные клавиши в любом порядке, что было бы не очень весело. Я бы поместил волшебную последовательность в массив, и, когда удачные нажатия клавиш совпадают, вы перемещаетесь в массиве. Если вы дойдете до конца, то это время яйца.

редактировать в точности так, как писал @EndangeredMassa.

...