我正在尝试将事件监听器添加到由Kineticjs管理的Htm5-Canvas(Canvas是通过KineticJS阶段创建的)。
我尝试了(使用jQuery):
$( selector )。keydown(function(e){...})
使用以下选择器:
只有$(窗口)正常工作。在尝试使用简单的Html5-Canvas后,我发现,Canvas-Element内置了对键盘事件的支持。 所以我认为,KineticJS正在这里做一些神奇的事情。可以排除错误的选择器使用。
我使用以下代码检查了每个Selector:console.log($(selector).length)
有人可以帮忙吗? Thx提前!
答案 0 :(得分:4)
我建议使用其中一个键盘插件:
他们与KineticJS一起工作很好。
答案 1 :(得分:1)
如果您可以在其中加入javascript,请输入以下代码:
if(keyIsPressed && keycode == somenumber){
doSomething();
}
答案 2 :(得分:0)
答案 3 :(得分:0)
根据我对此有限的经验(2天),我看到你添加的每一层都变成了画布,所以如果你有一个变量中最顶层的参考(即topmostLayer
),你可以做到
var canvas = $(topmostLayer.getContext().canvas);
有了这个,@devnull69建议正常工作:
canvas.attr('tabindex', 0);
canvas.keydown(function (ev) { ... });
我已将它应用到我的应用程序中并且工作正常。
答案 4 :(得分:0)
请参阅link,您需要:
var canvas=layer.getCanvas()._canvas;
$(canvas).attr('tabindex', 0); // increase tabindex if needed
canvas.focus();
$(canvas).keydown(function (e) {
console.log(e.keyCode); // your handler here
});
答案 5 :(得分:-2)
在接受键盘事件之前,您必须确保canvas元素具有焦点。不幸的是,.focus()方法在Firefox中对我不起作用,所以我尝试了这个并且voilà
$('canvas').attr('tabindex', 0);
$('canvas').keydown(function(e) {
alert(e.keyCode);
e.preventDefault(); // to stop the key events from bubbling up
});
单击画布,它将具有焦点。