diff --git a/src/renderer/components/core/PlayDetail/autoHideMounse.js b/src/renderer/components/core/PlayDetail/autoHideMounse.js index e16462bc..649615dd 100644 --- a/src/renderer/components/core/PlayDetail/autoHideMounse.js +++ b/src/renderer/components/core/PlayDetail/autoHideMounse.js @@ -11,20 +11,26 @@ const isControl = dom => { if (dom.getAttribute('aria-label') || dom.tagName == 'BUTTON') return true return isControl(dom.parentNode) } -const startTimeout = debounce(() => { - if (!isAutoHide || isMouseDown || !event) return - if (isControl(document.elementFromPoint(event.clientX, event.clientY))) return + +const lockPointer = () => { + if (!isAutoHide || isMouseDown) return + if (event && isControl(document.elementFromPoint(event.clientX, event.clientY))) return dom.requestPointerLock() isLockedPointer = true -}, 3000) +} +const unLockPointer = () => { + if (!isLockedPointer) return + document.exitPointerLock() + isLockedPointer = false +} + +const startTimeout = debounce(lockPointer, 3000) const handleMouseMove = (_event) => { event = _event startTimeout() - if (!isLockedPointer) return - document.exitPointerLock() - isLockedPointer = false + unLockPointer() } const handleMouseDown = () => { @@ -36,13 +42,13 @@ const handleMouseUp = () => { } export const registerAutoHideMounse = _dom => { - startTimeout() if (isAutoHide || !_dom) return isAutoHide = true _dom.addEventListener('mousemove', handleMouseMove) _dom.addEventListener('mousedown', handleMouseDown) _dom.addEventListener('mouseup', handleMouseUp) dom = _dom + startTimeout() } export const unregisterAutoHideMounse = dom => { @@ -52,4 +58,5 @@ export const unregisterAutoHideMounse = dom => { dom?.removeEventListener('mousemove', handleMouseMove) dom?.removeEventListener('mousedown', handleMouseDown) dom?.removeEventListener('mouseup', handleMouseUp) + unLockPointer() }