export default defineNuxtPlugin((nuxtApp) => { if (import.meta.client) { // 存储上一次的稳定宽度,避免重复计算 let lastStableWidth = 0 // 核心:获取稳定的窗口宽度(解决临时值问题) const getStableWidth = () => { // 读取布局宽度(比 innerWidth 更精准,不受滚动条/缩放影响) return document.documentElement.clientWidth } const setZoom = () => { const html = document.documentElement const width = getStableWidth() || window.innerWidth if (width === lastStableWidth && width !== 0) return lastStableWidth = width let zoom = 1 if (width >= 768 && width < 1440) { zoom = width / 1920 } html.style.zoom = zoom.toString() html.classList.add('zoom-ready') } document.documentElement.classList.remove('zoom-ready') setZoom() nuxtApp.hook('app:mounted', () => { requestAnimationFrame(setZoom) }) window.addEventListener('resize', setZoom) return { provide: { refreshZoom: setZoom, }, } } return { provide: { refreshZoom: () => {}, }, } })