我希望能夠記錄按下特定頁面上的按鍵,試圖實現「復活節彩蛋」類型的功能,當正確的按鍵被按下時按正確的順序觸發和事件。Javascript/jQuery Keypress日誌記錄
任何人都可以給我任何指針?
我希望能夠記錄按下特定頁面上的按鍵,試圖實現「復活節彩蛋」類型的功能,當正確的按鍵被按下時按正確的順序觸發和事件。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));
}
});
});
當你最終鍵入「蛋」(在這個例子中),你會得到一個警報,關鍵的歷史將重置。
編輯:更新了代碼以截斷字符串,如果它太長。
我早些時候使用過這個代碼來使用向上/向下箭頭滾動列表,應該相對容易地擴展它來檢查某個組合鍵。
$("#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;
}
使用jQuery:
$(document).keyup(function(e) {
if (e.keyCode == 27) {
alert("You pressed escape");
}
});
這捕獲整個頁面不只是一個特定的元素上的按鍵。
This blog post詳細信息如何捕獲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>
不錯的答案。儘管如此,我總是發現直接使用文字(例如40,38)可以更好地用某種常量/對象字面值代替,如下面的答案。 – 2010-02-19 16:12:42
@詹姆斯,同意,我爲此提出了你的答案。 – 2010-02-20 15:27:27
在這種情況下,它也可能是能夠檢查的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;
}
這促進自我記錄代碼,是更具可讀性和可維護性。
這裏有一個簡單的方法來要求在用戶輸入字符序列時按住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 = ""
}
})
更優雅如此調整了我的答案。 – CLiown 2010-02-19 16:21:13