fix: fix incorrect animation start position on mobile theme toggle

- Unified coordinate handling for mouse and touch events to ensure the
animation start point accurately follows the finger position on mobile
devices.
This commit is contained in:
immortal521
2025-08-16 01:45:57 +08:00
parent 2e749a5672
commit 9ce85f2769

View File

@@ -24,11 +24,13 @@ function apply(mode) {
: mode : mode
if (root.dataset.theme === newMode) return if (root.dataset.theme === newMode) return
root.dataset.theme = newMode root.dataset.theme = newMode
// 更新 meta 标签 // 更新 meta 标签
const androidMeta = document.querySelector('meta[name="theme-color"]') const androidMeta = document.querySelector('meta[name="theme-color"]')
const iosMeta = document.querySelector('meta[name="apple-mobile-web-app-status-bar-style"]') const iosMeta = document.querySelector('meta[name="apple-mobile-web-app-status-bar-style"]')
const themeColor = getComputedStyle(document.documentElement).getPropertyValue('--background-color').trim(); const themeColor = getComputedStyle(document.documentElement)
.getPropertyValue('--background-color')
.trim()
const themeStatus = newMode === 'dark' ? 'black-translucent' : 'default' const themeStatus = newMode === 'dark' ? 'black-translucent' : 'default'
if (androidMeta) { if (androidMeta) {
@@ -39,7 +41,7 @@ function apply(mode) {
newAndroidMeta.content = themeColor newAndroidMeta.content = themeColor
document.head.appendChild(newAndroidMeta) document.head.appendChild(newAndroidMeta)
} }
if (iosMeta) { if (iosMeta) {
iosMeta.content = themeStatus iosMeta.content = themeStatus
} else { } else {
@@ -69,8 +71,19 @@ export function setTheme(mode) {
function getCircle(event) { function getCircle(event) {
if (!import.meta.client) return undefined if (!import.meta.client) return undefined
const x = event.clientX
const y = event.clientY let x, y
if (event.touches?.length) {
x = event.touches[0].clientX
y = event.touches[0].clientY
} else if (event.changedTouches?.length) {
x = event.changedTouches[0].clientX
y = event.changedTouches[0].clientY
} else {
x = event.clientX
y = event.clientY
}
return { return {
x, x,
y, y,