キー割り当て用ライブラリを作った

依頼を受けて作ってみた。

http://la.ma.la/roll.html
http://la.ma.la/js/hotkey.js

j,kでスクロールできる。

使いまわしがきくように他のライブラリに依存も影響もしないように作ってあります。Bloglinesのj,kでスクロールみたいなのを作りやすいようにするのが目的。ただsafariとかは何かかなり違うらしいので、そこらへんは良く知らない。あとOperaはデフォルトでワンキーショートカットが割り当てられてたりするので動くとは限らない。

全体に対してキーイベントを設定すると、フォームの入力ができなくなるっていう問題があるのでイベントの発生元がinput|textareaの場合は処理しないようにしてある。

追加したコードはこんな感じ。
var kb = new HotKey;
kb.add(["j","2","down"], function(){rollto(c_pos + 1)});
kb.add(["k","8","up"]  , function(){rollto(c_pos - 1)});
kb.add(["H","home"],     function(){rollto(0)});
kb.add("pageup",         function(){rollto(c_pos-3)});
kb.add("pagedown",       function(){rollto(c_pos+3)});

kb.add("キー入力" , 実行する関数)という感じで、キー割り当てを追加。
複数のキーに対して同じ処理を割り当てたい場合は配列を渡せます。「shift + a」の場合は「A」を指定。
Ctrlを押して二秒以内にEnterとか、そういう細かい挙動は指定できない。
そこらへんはおいおい考える。
kb.sendKey("down")

みたいにやると、カーソルの下を押したときの動作をエミュレートできます。この辺はテストの自動化なんかにも応用できそう。

----

普通、クリックイベントなんかを割り当てる場合
buttonA.onclick = function(){...}
buttonB.onclick = function(){...}
buttonC.onclick = function(){...}

というような具合になるのだけれども、
document.body.onclick = function(e){
    switch(e.target.id){
     buttonA : ...
     buttonB : ...
     buttonC : ...
    }
}

というような記述のほうが効率が良い気がする。(実際はこういうコードじゃないけど、考え方として)

とりあえずdocument.body全体にリスナーイベントを設定してしまって、クリックされたHTMLElementのタグ名、ID、CSSのClassなんかに応じて内部で処理を振り分ける方式。

ウェブアプリケーションフレームワークでいうところのDispatchとかそこら辺のノウハウ応用すればもっと上手くやれそうな気がする。


WriteBacks

check*padがちょっと便利に!

さてcheck*pad、今回もちょろちょろマイナーバージョンアップを行いました。...

Posted by Idea * Idea at 2006/01/16 (Mon) 07:38:33

でくすもん WEBの舞台裏検索ツール

また、思いつきで作ってしまった・・・でくすもんhttp://blog.amazi...

Posted by AUSGANG SOFT at 2006/07/19 (Wed) 19:34:06

Greasemonkeyでランチャー

 前回のGreasemonkeyでテキストエディタは思った以上に、反響があってビ...

Posted by AUSGANG SOFT at 2006/11/27 (Mon) 21:15:16

cheap phentermine

Combien il co短te, pour d辿velopper un drapeau sur ton blog?

Posted by buy phentermine at 2007/09/14 (Fri) 06:38:01
TrackBack ping me at
http://la.ma.la/blog/diary_200511041713.trackback
Post a comment

writeback message: Ready to post a comment.







spam yoke. nanimo ireruna.