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 = ""
}
})