鼠标在全屏+指针锁定状态下按下任何键时都不会启动
Mousemove not firing when any key held down in full screen + pointer lock
在带有以下代码的页面上按enter键时,页面将进入指针锁定的全屏状态。移动鼠标将导致"mousemove"输出到控制台。关键事件运行良好,不过为了简化示例,我在全屏中去掉了关键事件。我的问题是,如果按住任何键,然后移动鼠标,则不会触发mousemove事件。这对全屏第一人称体验来说是个问题,因为这意味着用户不能同时移动和观看!在Firefox 23和Chrome 29、30和31中进行了测试。
更新:这只发生在我的Dell Latitude E6510上的集成触摸板和/或笔尖上。如果我插入USB鼠标,它似乎可以正常工作。
关于为什么会发生这种情况和/或如何解决这种情况的想法值得赞赏。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script>
var isPointerLockSupported = 'pointerLockElement' in document || 'mozPointerLockElement' in document || 'webkitPointerLockElement' in document;
var isFullScreenSupported = 'fullScreenEnabled' in document || 'mozFullScreenEnabled' in document || 'webkitFullscreenEnabled' in document;
function rPL(element, onEnter) {
var pointerlockchange = function (event) {
if (document.pointerLockElement === element || document.mozPointerLockElement === element || document.webkitPointerLockElement === element) {
onEnter.call(element, event);
}
else {
document.removeEventListener('pointerlockchange', pointerlockchange, false);
document.removeEventListener('mozpointerlockchange', pointerlockchange, false);
document.removeEventListener('webkitpointerlockchange', pointerlockchange, false);
}
};
document.addEventListener('pointerlockchange', pointerlockchange, false);
document.addEventListener('mozpointerlockchange', pointerlockchange, false);
document.addEventListener('webkitpointerlockchange', pointerlockchange, false);
element.requestPointerLock = element.requestPointerLock || element.mozRequestPointerLock || element.webkitRequestPointerLock;
element.requestPointerLock();
}
function rFS(element, onEnter) {
var fullscreenchange = function(event) {
if (document.fullScreenElement || document.mozFullScreenElement || document.webkitFullscreenElement) {
onEnter.call(element, event);
}
else {
document.removeEventListener('fullscreenchange', fullscreenchange, false);
document.removeEventListener('mozfullscreenchange', fullscreenchange, false);
document.removeEventListener('webkitfullscreenchange', fullscreenchange, false);
}
}
document.addEventListener('fullscreenchange', fullscreenchange, false);
document.addEventListener('mozfullscreenchange', fullscreenchange, false);
document.addEventListener('webkitfullscreenchange', fullscreenchange, false);
element.requestFullScreen = element.requestFullScreen || element.mozRequestFullScreen || element.webkitRequestFullScreen;
element.requestFullScreen(typeof Element.ALLOW_KEYBOARD_INPUT === 'undefined' ? undefined : Element.ALLOW_KEYBOARD_INPUT);
}
document.addEventListener('mousemove', function() {
console.log('mousemove');
}, false);
document.addEventListener('keydown', function(e) {
if (e.keyCode == 13 && isFullScreenSupported && isPointerLockSupported) {
var instructions = this;
rFS(document.body, function() {
rPL(document.body, function() {});
});
}
}, false);
</script>
</body>
</html>
触摸板唯一的问题是你的线索。尝试捕获ommousedown和onmouseup事件。您的事件之一是触发这些行为,这样您就不希望事件在鼠标按下时触发——只希望触发onclick或onmouseup事件。
相关文章:
- 如何在php中读取没有任何键的JSON数组
- 一键启动按钮不起作用
- 如何在JavaScript中启动键盘快捷键函数
- 识别值是否与 jqGrid 数据中的任何键匹配的正确方法是什么?
- IE窗口失去了对任何XMLHttpRequest启动Angular应用程序的关注
- 为什么首先单击文档空白处的任何位置启动代码,而不是单击超链接,以及为什么打开了太多选项卡
- 从任何浏览器启动程序/拨打电话
- Javascript addEventListener 用于不注册任何键值的键
- Javascript “卡住”键(未注册的键启动事件)
- 有效地对字典(或 JS 中的任何键值数据结构)进行排序word_number键
- 鼠标在全屏+指针锁定状态下按下任何键时都不会启动
- 如何在不按任何键的情况下通过Jquery调用按键事件
- 在网页上设置GIF动画-任何重新启动它们的方法
- 我如何检测如果CAPS LOCK状态是活跃的,不按任何键使用JS
- 使用返回键启动脚本
- 迭代整个JSON对象而不知道任何键
- 使用Knockout将任何键(通过keycode)绑定到一个动作
- 在UnderscoreJS中,是否存在用于匹配任何键值对的集合过滤器?
- 关键错误插入到MongoDB使用node.js失败的一些对象没有任何键包含一个点
- Tab键到ASP按钮上,然后按enter键启动按钮;不要点击开火