class DevicePixelRatio { constructor() { this.bodyElement = document.getElementsByTagName('body')[0]; // 缓存 body 元素 } // 判断是否为 Windows 系统 isWindowsSystem() { const agent = navigator.userAgent.toLowerCase(); return agent.indexOf("windows") >= 0; } // 通用事件绑定工具 addHandler(element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false); } else if (element.attachEvent) { element.attachEvent("on" + type, handler); } else { element["on" + type] = handler; } } // 校正浏览器缩放比例 correctZoom() { if (this.bodyElement) { // 使用 1 / window.devicePixelRatio 来调整 zoom this.bodyElement.style.zoom = 1 / window.devicePixelRatio; } } // 监听页面缩放(使用防抖优化) watchResize() { let timer = null; this.addHandler(window, 'resize', () => { if (timer) clearTimeout(timer); timer = setTimeout(() => { this.correctZoom(); }, 200); // 延迟 200ms 执行,避免频繁触发 }); } // 初始化页面比例校正 init() { if (this.isWindowsSystem()) { // 初始化校正 this.correctZoom(); // 开启监听 this.watchResize(); } } } export default DevicePixelRatio;