« 「wwwww」をお金にかえるグリースモンキー | メイン | Ruby会議2008 »

もの凄く簡単にコナミコマンドを実装する方法

一年程前、N-Styles氏がsiteにコナミコマンドを実装してから、コナミコマンドの実装が一部で流行しました。
ブームは終わったかに見えましたが、ここ一週間ぐらいのうちにブームが再燃したように感じます。
まあ、私が偶然連続して見たのかもしれませんが...。
一時、はてなブックマークのHotEntry(通称:ホッテントリ)に「IT 勉強会カレンダー」があがりましたが、この検索サイトである「IT 勉強会カレンダー検索」にもコナミコマンドが実装されています。
で、なんか悔しいので、もの凄く簡単にコナミコマンドを実現するための仕組みを作成しました。
var setKonamiCommand=
    function(handler){
        var addEvent=function(element,eventName,handler){
            if(element.attachEvent){
                element.attachEvent("on"+eventName,handler);
            }else if(element.addEventListener){
                element.addEventListener(eventName,handler,true);
            }else{
                element["on"+eventName]=handler;
            }
        }
        var commandHandler=
            function(handler,command){
                var _handler=handler;
                var _command=command;
                var checkedCommand=0;
                return function(event){
                    var e=event||Event;
                    if(e.keyCode==_command[checkedCommand]){
                        checkedCommand++;
                    }else{
                        checkedCommand=0;
                    }
                    if(checkedCommand==_command.length){
                        checkedCommand=0;
                        _handler();
                    }
                };
            }
        var konamiCommand=[38,38,40,40,37,39,37,39,66,65];
        var konamiHandler=commandHandler(handler,konamiCommand);
        addEvent(window,"keydown",konamiHandler);
        addEvent(document.getElementsByTagName("body")[0],"keydown",konamiHandler);
    };
使い方は、setKonamiCommandにcallback関数を渡すだけです。
var callback=function(){alert("powerup!");}
setKonamiCommand(callback);
簡単ですね。
デモも作成しました。
今回はじめて知ったのですが、userscriptのMinibufferもコナミコマンドを実装してました。
みんな好きだなぁ。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google

タグ クラウド