在全屏状态下鼠标在空白处静止不动3秒后自动将其隐藏
parent
c2fa4e5220
commit
36bef673d3
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
- 优化播放详情页背景显示,现在有背景图片的主题可以在播放详情页显示它的图片了
|
- 优化播放详情页背景显示,现在有背景图片的主题可以在播放详情页显示它的图片了
|
||||||
- 在全屏状态下的播放详情页仍会显示退出播放详情页按钮,同时在其旁边添加退出全屏按钮
|
- 在全屏状态下的播放详情页仍会显示退出播放详情页按钮,同时在其旁边添加退出全屏按钮
|
||||||
|
- 在全屏状态下鼠标在空白处静止不动3秒后自动将其隐藏
|
||||||
|
|
||||||
### 修复
|
### 修复
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
}
|
|
@ -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)
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue