1

这是我想做的一件非常简单的事情:当指针位于画布元素内并且我按下键“A”时,我想绘制一个以给定位置为中心的圆圈。唉,我似乎无法做到这一点。我知道如何添加一个监听器来捕获鼠标点击事件:

var canvas = goog.dom.getElement('my_canvas');
goog.events.listen(canvas, [goog.events.EventType.CLICK], 
   function(e) {console.log(e);});

简单的 es pie 和精美的作品:事件有我点击的坐标,所以我可以用它来画一个圆圈。但我想为此使用键盘(因为我还计划进行其他操作)。首先,我尝试了简单的:

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 版本(你是如何找到它的?),因为我使用的是与 Closure 版本捆绑在一起的 Plovr,但我相信它是最近的(2012 年 2 月)。

4

1 回答 1

2

好的,正如 cpeisert 在评论中指出的那样,问题是画布默认情况下无法获得输入焦点。我必须添加 'tabindex="1"' 才能实现。接下来,我必须用 div 包围画布并将我的事件处理程序附加到 div。

相关问题(虽然不使用闭包)

于 2012-06-28T22:10:47.370 回答