ここで私がやりたいことは非常に簡単です: ポインターがキャンバス要素内にあり、たとえばキー 'A' を押したときに、指定された場所を中心に円を描きたいとします。悲しいかな、私はこれを達成することができないようです。マウスクリックイベントをキャプチャするリスナーを追加する方法を知っています:
var canvas = goog.dom.getElement('my_canvas');
goog.events.listen(canvas, [goog.events.EventType.CLICK],
function(e) {console.log(e);});
簡単な es パイで、美しく機能します。イベントには、クリックした場所の座標が含まれているので、それを使用して円を描くことができます。しかし、これにはキーボードを使用したかったのです (他のアクションも計画しているため)。まず、簡単なことを試しました:
goog.events.listen(canvas, [goog.events.EventType.KEYDOWN],
function(e) {console.log(e);});
何もない。KEYUP、KEYPRESS、またはそれらすべてを一緒に使用してみましたが、ビープ音ではありませんでした。次に、 goog.events.KeyHandler に出会い、それを試しました。これが私がしたことです:
var canvas = goog.dom.getElement('my_canvas');
var keyHandler = new goog.events.KeyHandler(canvas);
goog.events.listen(keyHandler, goog.events.KeyHandler.EventType.KEY,
function(e) {console.log(e);});
まだ何もありません。さて、私は腹を立てたので、「キーボード イベントをキャプチャできるかどうか試してみましょう!」と言いました。そして、次のことを行いました:
var keyHandler = new goog.events.KeyHandler(document);
goog.events.listen(keyHandler, goog.events.KeyHandler.EventType.KEY,
function(e) {console.log(e);});
見よ、それはうまくいった:今、私はすべてのキーボードイベントをキャプチャしていた. 残念ながら、JavaScript コンソールでイベントを確認したところ、キーボード イベントには座標もターゲット要素も含まれていませんでした。何?つまり、あまり役に立ちませんよね?
とにかく、私は立ち往生しています。取るに足らないことのように思えましたが、私にはできないようです。
Mac OS X バージョン 10.7.4 で Chrome バージョン 19.0.1084.53 を使用しています。
Closure バージョンにバンドルされている Plovr を使用しているため、使用している Closure のバージョンについてはわかりませんが (2012 年 2 月)、かなり最近だと思います (2012 年 2 月)。