PinnovateCloud/composables/useLanguageTransition.ts
2025-09-11 10:55:59 +08:00

49 lines
1.3 KiB
TypeScript

import { ref } from 'vue'
import { useI18n } from 'vue-i18n'
// 创建全局状态,记录语言切换是否正在进行中
const isChangingLanguage = ref(false)
export function useLanguageTransition() {
const { locale } = useI18n()
// 平滑切换语言的函数
function smoothSwitchLanguage(newLocale: string) {
if (locale.value === newLocale) return
// 标记切换开始
isChangingLanguage.value = true
// // 保存当前滚动位置
// const scrollPosition = window.scrollY
// 添加切换中的标记到body元素
document.body.setAttribute('i18n-in-progress', 'true')
// 延迟执行实际的语言切换,让淡出动画有时间执行
setTimeout(() => {
// 切换语言
locale.value = newLocale
// 延迟恢复,让新语言内容有时间渲染
setTimeout(() => {
// 移除切换中的标记
document.body.removeAttribute('i18n-in-progress')
// // 恢复滚动位置
// window.scrollTo({
// top: scrollPosition,
// behavior: 'auto'
// })
// 标记切换结束
isChangingLanguage.value = false
}, 50) // 调整此值以适应渲染速度
}, 300) // 与CSS过渡时间匹配
}
return {
isChangingLanguage,
smoothSwitchLanguage
}
}