javascript - 如果指针锁定打开,mousemove 不会触发
问题描述
在请求指针锁定后尝试添加mousemove
侦听器时,我观察到奇怪的行为。document
我已经实现了以下内容,主要基于 MDN 的文档:
var onLockChange = () => {
env.handlers.onLockChange.forEach(lis => { lis(); });
};
document.addEventListener('pointerlockchange', onLockChange, false);
document.addEventListener('mozpointerlockchange', onLockChange, false);
document.addEventListener('pointerlockerror', (e) => {
console.error(e);
}, false);
...
var updatePosition = (e) => {
console.log('EVENT!', e);
};
env.handlers.onLockChange.push(() => {
console.log('INVOKED');
if ( hasPointerLock() ) {
document.addEventListener('mousemove', updatePosition, false);
console.log('Added Listener');
} else {
document.removeEventListener('mousemove', updatePosition, false);
console.log('Removed Listener');
}
})
canvas.onclick = () => {
if ( ! hasPointerLock() ) {
canvas.requestPointerLock();
}
};
我看到控制台日志完全符合我的预期。当我在画布元素上计时时,指针被困住,我看到:
INVOKED
Added Listener
但我从来没有见过EVENT!
。
为了让事情变得更奇怪,如果我注释掉对我的调用,document.removeEventListener
我观察到 mousemove 事件被捕获但仅在锁定关闭时。
解决方案
这是谷歌浏览器中的一个错误。
mousemove
在以下情况下不会触发: - 控制台打开,并且 - 指针被锁定
由于我在调试代码时一直打开控制台,因此我认为我的代码无法正常工作。
我花了一个小时试图弄清楚这件事。希望下一个人不必这样做。
推荐阅读
- mysql - 发生日期差异时SQL将日期与ID进行比较
- slack-api - 范围更改时强制重新安装?
- python - 致命的 Python 错误:_Py_HashRandomization_Init:无法获取随机数来初始化 Python
- android - 删除 Jetpack Compose 中的 LazyColumn 过度滚动效果
- r - R:将R中的日期格式从同一天的01:00更改为24:00
- ruby - 无法将现有付款资料设置为客户的默认付款资料
- python - 遍历字典以从键值对中查找值
- html - 当我更改窗口大小时,为什么我的正文文本与我的图像重叠?
- r - R函数可以像多米诺骨牌一样链接对?
- python - 如何在同一作业完成后再次运行该 cronjob