一年程前、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もコナミコマンドを実装してました。