jQuery はキーストロークを検出し、それに応じて変数を設定します
質問
コード内に基本的な 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
};
};
これらのキー以外の何かが押された場合にすべての変数をリセットするには、keydown 関数にリセット機能を追加する必要があります...そうすれば彼らはプレスしなければならない Enter + c + o + l + o + r + s
または、ステートメントがリセットされ、再度開始する必要があります...(これにより、「EasterEgg」にアクセスするのが難しくなります[または、少なくともまぐれやランダムなキーストロークでアクセスする可能性が低くなります)。
解決
これらも順番に確認していきたいと思います。現時点では、任意の順序でキーを押してもイースターエッグをアクティブにすることができます。 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
コード内の他の場所を変更する必要がなく、変数を変更できます。
編集:おそらくそうするように、答えを連続させたい場合は、 nextKey
一致が失敗した場合の変数。
if (key === keys[nextKey])
nextKey++;
else
nextKey = 0;
追加のクレジットとして、イースターエッグを保持するために文字列を使用するようにこれを切り替えることもできます。 String.fromCharCode
という文字コードに変換します。 e.which
戻り値。
他のヒント
最近、同様のイースターエッグの質問に回答したので、それについてだけ説明します。
あなたがやっていることとは異なるアプローチが必要であり、リセットする必要はありません。
編集: 鍵の履歴が長くなりすぎないようにする更新バージョンは次のとおりです。
$(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));
}
});
});
さて現在、あなたは、ユーザーが非常に多くの楽しみではありません任意の順序でマジックキーを押すようにするつもりです。私は配列に魔法のシーケンスを置くところ、成功したキーストロークが一致するよう、あなたは配列に前進します。あなたが最後に取得した場合、それは卵の時間です。
編集正確@EndangeredMassaが書いたように。
ここでは別のアプローチがあります:
<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;"
を追加し、あなたがデバッグするための簡単なテキストボックスに入力した色の現在の部分を追跡したときだ完了検査ます。