下载非内核
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, computed } from 'vue'
|
||||
import { ref, computed, onUnmounted } from 'vue'
|
||||
import { Search, Minus, Square, X, Settings, ChevronRight } from '@lucide/vue'
|
||||
import { Input } from '@/components/ui/input'
|
||||
import { getCurrentWindow } from '@tauri-apps/api/window'
|
||||
@@ -72,17 +72,46 @@ const maximize = async () => {
|
||||
// 期间用 CSS 覆盖 :hover 样式,避免按钮残留高亮(webview 隐藏时 mouseleave 不触发)
|
||||
const hoverSuppressed = ref(true)
|
||||
|
||||
// 恢复 hover 的定时器引用,便于在鼠标进入时提前恢复
|
||||
let restoreHoverTimer: ReturnType<typeof setTimeout> | null = null
|
||||
|
||||
/** 窗口重新显示后恢复 hover 状态 */
|
||||
const restoreHover = (delay = 200) => {
|
||||
if (restoreHoverTimer) clearTimeout(restoreHoverTimer)
|
||||
restoreHoverTimer = setTimeout(() => {
|
||||
hoverSuppressed.value = false
|
||||
}, delay)
|
||||
}
|
||||
|
||||
/** 鼠标移动时恢复 hover(比定时器更可靠,webview 隐藏时 mouseleave 不触发,:hover 被冻结) */
|
||||
const handleFirstMouseMove = () => {
|
||||
if (hoverSuppressed.value) {
|
||||
hoverSuppressed.value = false
|
||||
if (restoreHoverTimer) {
|
||||
clearTimeout(restoreHoverTimer)
|
||||
restoreHoverTimer = null
|
||||
}
|
||||
}
|
||||
window.removeEventListener('mousemove', handleFirstMouseMove)
|
||||
}
|
||||
|
||||
/** 注册鼠标移动监听(窗口即将隐藏时调用,为下次显示做准备) */
|
||||
const armMouseMoveRestore = () => {
|
||||
window.removeEventListener('mousemove', handleFirstMouseMove)
|
||||
window.addEventListener('mousemove', handleFirstMouseMove)
|
||||
}
|
||||
|
||||
const close = async () => {
|
||||
// 隐藏前立即抑制 hover,避免冻结的 :hover 状态残留到下次显示
|
||||
hoverSuppressed.value = true
|
||||
if (document.activeElement instanceof HTMLElement) {
|
||||
document.activeElement.blur()
|
||||
}
|
||||
// 注册鼠标移动监听,窗口重新显示后第一次移动即恢复 hover
|
||||
armMouseMoveRestore()
|
||||
await tauriWindow?.hide()
|
||||
}
|
||||
|
||||
// 窗口重新获得焦点时,先保持抑制(防止冻结的 hover 显示),
|
||||
// 短暂延迟后恢复 hover(让真实鼠标位置重新接管)
|
||||
if (tauriWindow) {
|
||||
tauriWindow.onFocusChanged(({ payload: focused }) => {
|
||||
if (focused) {
|
||||
@@ -90,10 +119,10 @@ if (tauriWindow) {
|
||||
if (document.activeElement instanceof HTMLElement) {
|
||||
document.activeElement.blur()
|
||||
}
|
||||
// 100ms 后恢复 hover,足够让浏览器重置伪类状态
|
||||
setTimeout(() => {
|
||||
hoverSuppressed.value = false
|
||||
}, 100)
|
||||
// 200ms 后恢复 hover,足够让浏览器重置伪类状态
|
||||
restoreHover(200)
|
||||
// 同时注册鼠标移动监听作为后备(定时器可能不够,鼠标移动更可靠)
|
||||
armMouseMoveRestore()
|
||||
} else {
|
||||
hoverSuppressed.value = true
|
||||
}
|
||||
@@ -101,9 +130,12 @@ if (tauriWindow) {
|
||||
}
|
||||
|
||||
// 初始时窗口已显示,恢复 hover
|
||||
setTimeout(() => {
|
||||
hoverSuppressed.value = false
|
||||
}, 200)
|
||||
restoreHover(300)
|
||||
|
||||
onUnmounted(() => {
|
||||
window.removeEventListener('mousemove', handleFirstMouseMove)
|
||||
if (restoreHoverTimer) clearTimeout(restoreHoverTimer)
|
||||
})
|
||||
|
||||
const handleBlur = () => {
|
||||
setTimeout(() => {
|
||||
|
||||
Reference in New Issue
Block a user