2

我想知道是否可以检测单词输入。我有两个选择:

  1. 要在输入中写入的单词,并在 Enter 时按下以触发某个命令,例如动画或转到 url。

  2. 要写在页面上任何位置的单词,例如 GTA 秘籍或一些 YouTube 复活节彩蛋。

如果我不清楚,请说,我会编辑。

4

3 回答 3

5

将按键监听器添加到正文,将字符附加到字符串并将其与目标单词进行比较:

var word = "hello";
var input = "";
document.body.addEventListener('keypress',function(ev){
    input += String.fromCharCode(ev.keyCode);
    console.log(input);
    if(input == word){
        alert('typed hello');
        input = "";
    }
});

// reset input when pressing esc
document.body.addEventListener('keyup',function(ev){
    if(ev.keyCode == 27) input = "";
});

演示:

http://jsfiddle.net/9GC4N/

于 2013-08-11T10:06:07.167 回答
1

一种提升:

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 = ""
    }
})
于 2013-12-07T13:04:18.387 回答
0

我认为使用队列更有意义,因为我们总是在每次按键后将最后 x 个字符与目标序列进行比较。

例如

var seq = 'upsidedown';
var input = '';
window.addEventListener('keypress', function(e) {
    // Add the latest character to the end of the queue
    input += String.fromCharCode(e.keyCode);

    // If the queue is longer than the target sequence remove the first character
    if(input.length > seq.length) {
        input = input.substr(1);
    }

    // Check for a match
    if(input == seq) {
        alert("EASTER EGG!")
    }

})
于 2017-08-23T00:34:01.397 回答