在请求指针锁定后尝试添加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 事件被捕获但仅在锁定关闭时。