全屏捕获键盘输入似乎不起作用
Catching keyboard input while fullscreen seems not to work
我正在用Three.js做一个游戏,我需要获取用户输入。我有两个处理程序函数;
function press(evt)
{
console.log(evt);
//evt = window.event;
var code = evt.which || evt.keyCode;
switch(code)
{
case KEY.W: input.up = true; break;
case KEY.A: input.left = true; break;
case KEY.S: input.down = true; break;
case KEY.D: input.right = true; break;
case KEY.E: input.e = true; break;
case KEY.Z: input.z = true; break;
case KEY.ONE: input.one = true; break;
case KEY.CTRL: input.ctrl = true; break;
case KEY.P: input.plus = true; break;
case KEY.M: input.minus = true; break;
case KEY.SH: input.shift = true; break;
}
}
function release(evt)
{
console.log(evt);
//evt = window.event;
var code = evt.which || evt.keyCode;
switch(code)
{
case KEY.W: input.up = false; break;
case KEY.A: input.left = false; break;
case KEY.S: input.down = false; break;
case KEY.D: input.right = false; break;
case KEY.E: input.e = false; break;
case KEY.Z: input.z = false; break;
case KEY.ONE: input.one = false; break;
case KEY.CTRL: input.ctrl = false; break;
case KEY.P: input.plus = false; break;
case KEY.M: input.minus = false; break;
case KEY.SH: input.shift = false; break;
}
}
我在其他项目中都使用这两种方法,并且它们工作正常。这是我附加事件侦听器的方式:
document.addEventListener("keydown", press, false);
document.addEventListener("keyup", release, false);
这在网站正常加载时有效,但在网站全屏时不起作用!
这是 init(); 函数中的 while 设置,该函数在 body onload
事件中被调用:
var init = function()
{
started = false;
isFullscreen = false;
changeFSState = function()
{
if (isFullscreen == true)
{
isFullscreen = false;
game.stop(); //lol
}
else
{
isFullscreen = true;
}
}
container = document.getElementById("container");
document.body.appendChild(container);
document.addEventListener("keydown", press, false);
document.addEventListener("keyup", release, false);
document.addEventListener("webkitfullscreenchange", changeFSState, false);
document.addEventListener("mozfullscreenchange", changeFSState, false);
game = new Game(container);
}
单击play
按钮后,将发生以下情况:
THREEx.FullScreen.request(self.container);
self.renderer.setSize(screen.width, screen.height);
现在,正如我所说,捕获输入一直有效,直到我单击play
按钮(实际上是一个链接),然后控制台只是停止记录事件,就好像它们没有发生一样。
THREEx.FullScreen 似乎正在使用以下代码:
element.webkitRequestFullScreen();
你需要的是这个:
element.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
似乎这只是Chrome。
相关文章:
- 点击按钮输入不起作用
- 鼠标输入在 YUI 的 chrome 中不起作用
- I'我试图在文本区域中进行特定的输入,调用特定的javascript函数,但没有成功;不起作用
- Knockout输入绑定不起作用
- 输入类型范围在angularjs重复内不起作用
- 我的角度形式输入[数字]验证不起作用
- 模态上的输入/注册字段不起作用
- html/jquery输入类型:单选框中的文本不起作用
- jQuery在文本输入点击时不起作用
- 指令中选择输入的双向绑定不起作用
- 按键事件上的简单HTML输入不起作用
- JavaScript onChange 事件侦听器对输入表单不起作用
- 鼠标输入和鼠标离开不起作用
- 专注于输入角度不起作用
- JavaScript - 输入按钮隐藏 - 不起作用
- 使用复选框切换密码输入(由于安全风险而不起作用)
- 当输入字段位于 ng 重复中时,ng 禁用不起作用
- 数组输入不起作用
- Phonegap-输入类型的电子邮件maxlength不起作用
- 输入类型的图像在Internet Explorer中不起作用,但在Chrome和Firefox中起作用