我正在使用kongregate shell将libgdx中的gwt游戏导出到Kongregate,它会创建一个iframe并将游戏放入其中。从环顾四周,我发现了一个关于放置window.focus()的小窍门,让游戏实际上拿起了键盘输入,但是当我使用箭头键时,它会滚动实际的浏览器窗口,使其非常烦人。
有什么方法可以在iframe处于焦点时忽略浏览器以避免这种情况吗?
由于
答案 0 :(得分:1)
我在自己的网站上发布游戏时遇到过这个问题,我在libGDX GitHub问题跟踪器上询问,我在issue上得到了这个回复。
总结maximojr告诉我的内容,你需要在脚本中添加一个额外的函数:
function preventUseOfDefaultKeys(event) { // You can change the function name
if(event.keyCode == 38) { // 38 would be the up arrow
event.preventDefualt();
}
}
然后,在HTML文件的正文标记中(因为这是一个iframe,我不确定这会有多好用,但值得一试)而不是<body>
写<body onkeydown="preventUseOfDefaultKeys(event);" >
。这应该有效,尽管我在系统上遇到了某些键的问题。
希望这有帮助!
答案 1 :(得分:0)
我遇到了同样的问题。我得到了解决方案。
<body>
标记的开头创建一个文本字段: <input type="text" id="shazam" style="position: absolute; left: 50%; z-index: -1; border-color: transparent; outline: none; color: transparent; background-color: transparent;" />
&#39;&#39;&#39;绝对意味着它会忽略其他元素,左边的&#39;将它(几乎)放在窗口的中心和“z-index”#39;将首先渲染它,将其他元素放在此上(在本例中为libgdx生成的画布)。没有轮廓和颜色设置为透明,只是为了确保此输入不可见。
<head>
标记处放置此脚本: <script type="text/javascript">
window.onkeydown = function(e) {
if(e.keyCode == 32) {
document.getElementById("shazam").focus();
}
};
window.onscroll = function(e){
document.getElementById("shazam").style.top=window.pageYOffset+"px";
};
</script>
这将禁用向下滚动空间,但画布外的任何内容都不会收到空格键。 我只在Google Chrome上测试过。
我知道,这是一个丑陋的解决方法,但是......好吧,有效。
----修改
现在,在用鼠标滚动窗口后按下空格时,窗口不会突然向上滚动。