在全屏状态下鼠标在空白处静止不动3秒后自动将其隐藏

pull/930/merge
lyswhut 2022-03-28 18:05:58 +08:00
parent c2fa4e5220
commit 36bef673d3
3 changed files with 69 additions and 2 deletions

View File

@ -8,6 +8,7 @@
- 优化播放详情页背景显示,现在有背景图片的主题可以在播放详情页显示它的图片了 - 优化播放详情页背景显示,现在有背景图片的主题可以在播放详情页显示它的图片了
- 在全屏状态下的播放详情页仍会显示退出播放详情页按钮,同时在其旁边添加退出全屏按钮 - 在全屏状态下的播放详情页仍会显示退出播放详情页按钮,同时在其旁边添加退出全屏按钮
- 在全屏状态下鼠标在空白处静止不动3秒后自动将其隐藏
### 修复 ### 修复

View File

@ -0,0 +1,55 @@
import { debounce } from '@renderer/utils/index'
let isAutoHide = false
let isLockedPointer = false
let dom = null
let event = null
let isMouseDown = false
const isControl = dom => {
if (!dom || dom === document.body) return false
// console.log(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
dom.requestPointerLock()
isLockedPointer = true
}, 3000)
const handleMouseMove = (_event) => {
event = _event
startTimeout()
if (!isLockedPointer) return
document.exitPointerLock()
isLockedPointer = false
}
const handleMouseDown = () => {
isMouseDown = true
}
const handleMouseUp = () => {
isMouseDown = false
startTimeout()
}
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
}
export const unregisterAutoHideMounse = dom => {
if (!isAutoHide) return
isAutoHide = false
// console.log(dom)
dom?.removeEventListener('mousemove', handleMouseMove)
dom?.removeEventListener('mousedown', handleMouseDown)
dom?.removeEventListener('mouseup', handleMouseUp)
}

View File

@ -1,6 +1,6 @@
<template lang="pug"> <template lang="pug">
transition(enter-active-class="animated lightSpeedIn" leave-active-class="animated slideOutDown" @after-enter="handleAfterEnter" @after-leave="handleAfterLeave") transition(enter-active-class="animated lightSpeedIn" leave-active-class="animated slideOutDown" @after-enter="handleAfterEnter" @after-leave="handleAfterLeave")
div(:class="[$style.container, { [$style.fullscreen]: isFullscreen }]" @contextmenu="handleContextMenu" v-if="isShowPlayerDetail") div(:class="[$style.container, { [$style.fullscreen]: isFullscreen }]" @contextmenu="handleContextMenu" v-if="isShowPlayerDetail" ref="dom_content")
div(:class="$style.bg") div(:class="$style.bg")
//- div(:class="$style.bg" :style="bgStyle") //- div(:class="$style.bg" :style="bgStyle")
//- div(:class="$style.bg2") //- div(:class="$style.bg2")
@ -57,7 +57,7 @@ transition(enter-active-class="animated lightSpeedIn" leave-active-class="animat
<script> <script>
import { useRefGetter, ref } from '@renderer/utils/vueTools' import { useRefGetter, ref, watch } from '@renderer/utils/vueTools'
import { isFullscreen } from '@renderer/core/share' import { isFullscreen } from '@renderer/core/share'
import { base as eventBaseName } from '@renderer/event/names' import { base as eventBaseName } from '@renderer/event/names'
import { import {
@ -72,6 +72,7 @@ import {
import LyricPlayer from './LyricPlayer' import LyricPlayer from './LyricPlayer'
import PlayBar from './PlayBar' import PlayBar from './PlayBar'
import MusicComment from './components/MusicComment' import MusicComment from './components/MusicComment'
import { registerAutoHideMounse, unregisterAutoHideMounse } from './autoHideMounse'
export default { export default {
name: 'CorePlayDetail', name: 'CorePlayDetail',
@ -83,6 +84,7 @@ export default {
setup() { setup() {
const setting = useRefGetter('setting') const setting = useRefGetter('setting')
const visibled = ref(false) const visibled = ref(false)
const dom_content = ref(null)
let clickTime = 0 let clickTime = 0
@ -103,6 +105,8 @@ export default {
} }
const handleAfterEnter = () => { const handleAfterEnter = () => {
if (isFullscreen.value) registerAutoHideMounse(dom_content.value)
visibled.value = true visibled.value = true
} }
@ -110,8 +114,14 @@ export default {
setShowPlayLrcSelectContentLrc(false) setShowPlayLrcSelectContentLrc(false)
hideComment(false) hideComment(false)
visibled.value = false visibled.value = false
unregisterAutoHideMounse(dom_content.value)
} }
watch(isFullscreen, isFullscreen => {
(isFullscreen ? registerAutoHideMounse : unregisterAutoHideMounse)(dom_content.value)
})
return { return {
setting, setting,
isShowPlayerDetail, isShowPlayerDetail,
@ -125,6 +135,7 @@ export default {
handleAfterLeave, handleAfterLeave,
visibled, visibled,
isFullscreen, isFullscreen,
dom_content,
fullscreenExit() { fullscreenExit() {
window.eventHub.emit(eventBaseName.fullscreenToggle, false) window.eventHub.emit(eventBaseName.fullscreenToggle, false)
}, },