简单制作网页彩蛋,JavaScript实现Konami Code

时间: 2009-8-25 - 分类: JavaScript - 评论: 1 - 阅读: 1,754 次

很久之前,在圆心的博客上看到了JavaScript 实现 Konami Code ,这东西还真有趣,有空也可以给自己的网页搞一个彩蛋玩玩。

Konami Code简单的说,就是键盘输入 Up, Up, Down, Down, Left, Right, Left, Right, B, A 后,页面上出现特殊的变化。这个规则来自于“魂斗罗”中的“秘技”。“秘技”的术语就叫 Konami Code

Konami Code

照着圆心说的,在Google Reader上试了一把:

google reader konami code

google reader konami code

没想到google reader上面居然也有这样的彩蛋,哈哈

圆心在博客也给出了JavaScript实现Konami code的2种方法。

方法一:

Abhi《Konami Code on Facebook : How to implement it on your site》 一文中提供了大体思路:

var $ = {
    enabled: false,
    tmp: Array(),
    _konamiCode: Array(65,66,39,37,39,37,40,40,38,38),
    init: function() {
        this.tmp = Array(65,66,39,37,39,37,40,40,38,38);
    },
    konamiCode: function(e) {
        if(!this.enabled) {
            var t = this.tmp.pop();
            if((e.keyCode-t) == 0) {
                if(this.tmp.length == 0) {
                    this.enabled = true;
                }
            } else {
                this.init();
            }
        } else {
            this.action();
        }
    },
    // Change the action() function to whatever you want to
    action: function() {
        //alert("Konami Code Activated");
    }
}

然后在 load 的时候调用 $.init() 方法,在 keydown 的时候调用 $.konamiCode(event) 方法。

方法二:

不过 Abhi 的方法还是冗余了点,Jan Jarfalk 在留言中提供了一个短小精悍的代码:

// Tweetable Konami code
var k=[];
function(e){
    k.push(e.keyCode);
    if(k.toString().indexOf("38,38,40,40,37,39,37,39,66,65")>=0) {
        //alert("Konami Code Activated");
    }
}

方法2显然更帅气一点,我在自己博客上也搞了一把,不过方法二有点缺陷,需要改进,试过一次就知道了,第一次激活konami code之后,数组没有清空,那么会导致indexOf每次都包含konami code而会再次激活。也就是说,输入一次秘笈之后,每次你再按下任意按键都会触发konami code。此外,这个代码IE下就跑不了了,需要稍微处理一下事件。呃,大师也总有疏忽的时候啊。把方法二改进一下:

var k=[];
function(e){
    e = e||window.event;
    k.push(e.keyCode);
    if(k.toString().indexOf("38,38,40,40,37,39,37,39,66,65")>=0) {
        //alert("Konami Code Activated");
    k=[];//激活后清空数组
}
}

这样稍微改动即可,我已经在自己博客上加了这个代码了,各位看官可以自己尝试一把,嘿嘿。

这是我放在自己网页上的JavaScript Konami code,想试一下的人,直接把代码copy到自己网页的head中去就行了。

<script type="text/javascript">
var k=[];
document.onkeydown = function(e){
    e = e||window.event;
    k.push(e.keyCode);
    if(k.toString().indexOf("38,38,40,40,37,39,37,39,66,65")>=0) {
        alert("谁能比我帅~~");
        k=[];
    }
}
</script>

1个评论

  1. 青怪 - 2009年9月15日 4:31 下午

    谁能比我帅,哈哈

发表评论