Gmail スタイルのショートカ​ットを実装できる『M​ousetrap』

Web アプリにショートカットを実装したくて、ライブラリを探していたら、良いの見つけた。 『Mousetrap』。

JavaScript でショートカットを実装するライブラリでは shortcuts.js が有名だけど、後発の Mousetrap は shortcuts.js と同等のことができる。さらに Mousetrap が優れていて、個人的にツボだったのは、Gmail

  • g, i で受信箱に移動
  • g, a ですべてのメールに移動
  • *, a ですべてのメールを選択

みたいな、キーを組み合わせるタイプのショートカットも実装できること。コイツがやりたかったんだ。

使い方は簡単で、Mousetrap.bind メソッドにショートカットキーの文字列と、実行したい関数を渡すだけ。Mousetrap を使ったサンプルは次の通り。余命宣告された Google リーダーを意識している。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Mousetrap sample</title>
  </head>
  <body>
    <h1>Mousetrap sample</h1>
 
    <script type="text/javascript" src="mousetrap.js"></script>
    <script type="text/javascript">
      // キー1つだけ押すショートカット
      Mousetrap.bind("j", function(e) {
        alert("[j] 次の記事へ移動");
      });
      Mousetrap.bind("k", function(e) {
        alert("[k] 前の記事に移動");
      });
 
      // 2つ以上のキーを組み合わせたショートカット
      Mousetrap.bind("g a", function(e) {
        alert("[g a] すべての記事を表示");
      });
      Mousetrap.bind("g s", function(e) {
        alert("[g s] スターのついた記事を表示");
      });
 
      // shift を押す必要があるショートカット
      Mousetrap.bind("K", function(e) {
        alert("[K] 前のフィードを表示");
      });
      Mousetrap.bind("shift+j", function(e) {
        alert("[J] 次のフィードを表示");
      });
      Mousetrap.bind("?", function(e) {
        alert("[?] ヘルプを表示");
      });
 
      // ctrl を押す必要があるショートカット
      Mousetrap.bind("ctrl+s", function(e) {
        alert("[ctrl+s] フィードを購読");
      });
 
      // 複数の特殊キーを押す必要があるショートカット
      Mousetrap.bind("ctrl+shift+d", function(e) {
        alert("[ctrl+shift+d] 購読解除");
      });
 
      // コナミコマンド
      Mousetrap.bind("up up down down left right left right b a", function(e) {
        alert("[up up down down left right left right b a] コナミコマンド");
      });
    </script>
  </body>
</html>