Я реализую функцию панорамирования, где вы можете панорамировать, удерживая пробел и щелкая, чтобы перетащить. Ниже приведен упрощенный пример того, как работает мой код.
Проблема заключается в том, что если сам браузер теряет фокус перед освобождением пробела, то окно все еще прослушивает события mousedown и не прекращает прослушивание до тех пор, покаПробел снова нажимается и отпускается.
Я прочитал и добавил изменение видимости и размытие, но они запускаются только при выборе другой вкладки в браузере, а не когда сам браузер теряет фокус.
Есть ли способ отследить, когда сам браузер теряет / восстанавливает фокус? Или есть способ получить доступ к списку всех нажатых в настоящее время клавиш за пределами прослушивателя событий?
Если это невозможно, моим пользователям, возможно, придется с этим справиться.
const spacebarDown = ({ key }) => {
if (key === ' ') {
const startPanning = e => {
// some code to track mouse location
const pan = e => {
// some code to compare mouse location and apply translation to element
}
const stopPanning = e => {
window.removeEventListener('mousemove', pan);
}
window.addEventListener('mousemove', pan);
window.addEventListener('mouseup', stopPanning);
}
const spacebarUp = ({ key }) => {
if (key === ' ') window.removeEventListener('mousedown', startPanning);
}
window.addEventListener('mousedown', startPanning);
window.addEventListener('keyup', spacebarUp);
window.addEventListener('blur', spacebarUp);
document.addEventListener('visibilitychange', spacebarUp);
}
}
window.addEventListener('keydown', spacebarDown);