feat: 优化歌词颜色检测逻辑

This commit is contained in:
algerkong
2025-12-20 14:18:27 +08:00
parent 999cd6526b
commit c3dd03cc13
3 changed files with 29 additions and 64 deletions
+15 -47
View File
@@ -417,42 +417,29 @@ const setTextColors = (background: string) => {
} }
}; };
// 监听背景变化 const targetBackground = computed(() => {
if (config.value.useCustomBackground && customBackgroundStyle.value) {
if (typeof customBackgroundStyle.value === 'string') {
return customBackgroundStyle.value;
}
}
if (config.value.theme !== 'default') {
return themeMusic[config.value.theme] || props.background;
}
return props.background;
});
// 监听目标背景变化并更新文字颜色
watch( watch(
() => props.background, targetBackground,
(newBg) => { (newBg) => {
if (config.value.useCustomBackground) { if (newBg) {
// 使用自定义背景时,根据自定义背景计算文字颜色
if (customBackgroundStyle.value) {
setTextColors(customBackgroundStyle.value);
}
} else if (config.value.theme === 'default') {
setTextColors(newBg); setTextColors(newBg);
} else {
setTextColors(themeMusic[config.value.theme] || props.background);
} }
}, },
{ immediate: true } { immediate: true }
); );
// 监听自定义背景配置变化
watch(
() => [config.value.useCustomBackground, customBackgroundStyle.value] as const,
([useCustom, customBg]) => {
if (useCustom && customBg && typeof customBg === 'string') {
setTextColors(customBg);
} else {
// 回退到主题模式
if (config.value.theme === 'default') {
setTextColors(props.background);
} else {
setTextColors(themeMusic[config.value.theme] || props.background);
}
}
},
{ deep: true }
);
const { getLrcStyle: originalLrcStyle } = useLyricProgress(); const { getLrcStyle: originalLrcStyle } = useLyricProgress();
const getLrcStyle = (index: number) => { const getLrcStyle = (index: number) => {
@@ -589,15 +576,6 @@ watch(
{ immediate: true } { immediate: true }
); );
// 监听配置变化并保存到本地存储
watch(
() => config.value,
(newConfig) => {
localStorage.setItem('music-full-config', JSON.stringify(newConfig));
},
{ deep: true }
);
// 监听滚动事件 // 监听滚动事件
const handleScroll = () => { const handleScroll = () => {
if (!lrcSider.value || !config.value.hideCover) return; if (!lrcSider.value || !config.value.hideCover) return;
@@ -677,16 +655,6 @@ watch(
} }
); );
// 监听主题变化
watch(
() => config.value.theme,
(newTheme) => {
const newBackground = themeMusic[newTheme] || props.background;
setTextColors(newBackground);
},
{ immediate: true }
);
// 添加文字间距监听 // 添加文字间距监听
watch( watch(
() => config.value.letterSpacing, () => config.value.letterSpacing,
@@ -979,14 +979,19 @@ const setTextColors = (background: string) => {
} }
}; };
// 监听背景变化 const targetBackground = computed(() => {
if (config.value.theme !== 'default') {
return themeMusic[config.value.theme] || props.background;
}
return props.background;
});
// 监听目标背景变化并更新文字颜色
watch( watch(
() => props.background, targetBackground,
(newBg) => { (newBg) => {
if (config.value.theme === 'default') { if (newBg) {
setTextColors(newBg); setTextColors(newBg);
} else {
setTextColors(themeMusic[config.value.theme] || props.background);
} }
}, },
{ immediate: true } { immediate: true }
@@ -1040,16 +1045,6 @@ const closeMusicFull = () => {
playerStore.setMusicFull(false); playerStore.setMusicFull(false);
}; };
// 监听主题变化
watch(
() => config.value.theme,
(newTheme) => {
const newBackground = themeMusic[newTheme] || props.background;
setTextColors(newBackground);
},
{ immediate: true }
);
// 添加对 playMusic.id 的监听,歌曲切换时滚动到顶部 // 添加对 playMusic.id 的监听,歌曲切换时滚动到顶部
watch( watch(
() => playMusic.value.id, () => playMusic.value.id,
@@ -1116,7 +1111,9 @@ onMounted(() => {
watch(isVisible, (newVal) => { watch(isVisible, (newVal) => {
if (newVal) { if (newVal) {
// 播放器显示时,重新设置背景颜色 // 播放器显示时,重新设置背景颜色
setTextColors(props.background); if (targetBackground.value) {
setTextColors(targetBackground.value);
}
} else { } else {
showFullLyrics.value = false; showFullLyrics.value = false;
if (autoScrollTimer.value) { if (autoScrollTimer.value) {
+1 -1
View File
@@ -44,7 +44,7 @@ export const DEFAULT_LYRIC_CONFIG: LyricConfig = {
hideMiniPlayBar: false, hideMiniPlayBar: false,
pureModeEnabled: false, pureModeEnabled: false,
hideLyrics: false, hideLyrics: false,
contentWidth: 100, // 默认100%宽度 contentWidth: 75, // 默认100%宽度
// 移动端默认配置 // 移动端默认配置
mobileLayout: 'ios', mobileLayout: 'ios',
mobileCoverStyle: 'full', mobileCoverStyle: 'full',