关于vue自适应分辨率

106 阅读1分钟

1.创建js文件 DevicePixelRatio class DevicePixelRatio { constructor() { //this.flag = false; } //获取系统类型 _getSystem() { // eslint-disable-next-line no-unused-vars let flag = false; var agent = navigator.userAgent.toLowerCase(); // var isMac = /macintosh|mac os x/i.test(navigator.userAgent); // if(isMac) { // return false; // } //现只针对windows处理,其它系统暂无该情况,如有,继续在此添加 if (agent.indexOf("windows") >= 0) { return true; } } //获取页面缩放比例 // _getDevicePixelRatio() { // let t = this; // } //监听方法兼容写法 _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; } } //校正浏览器缩放比例 _correct() { // eslint-disable-next-line no-unused-vars let t = this; //页面devicePixelRatio(设备像素比例)变化后,计算页面body标签zoom修改其大小,来抵消devicePixelRatio带来的变化。 document.getElementsByTagName('body')[0].style.zoom = 1 / window.devicePixelRatio; } //监听页面缩放 _watch() { let t = this; t._addHandler(window, 'resize', function() { //注意这个方法是解决全局有两个window.resize //重新校正 t._correct() }) } //初始化页面比例 init() { let t = this; if (t._getSystem()) { //判断设备,目前只在windows系统下校正浏览器缩放比例 //初始化页面校正浏览器缩放比例 t._correct(); //开启监听页面缩放 t._watch(); } } } export default DevicePixelRatio; 显示页面组件 import DevicePixelRatio from '../DevicePixelRatio' created(){ new DevicePixelRatio() } mounted(){ window.onresize=()=>{ return (()=>{ this.detectZoom() })() } }, methods:{ detectZoom (){ var ratio = 0, screen = window.screen, ua = navigator.userAgent.toLowerCase(); if (window.devicePixelRatio !== undefined) { ratio = window.devicePixelRatio; } else if (~ua.indexOf('msie')) {
if (screen.deviceXDPI && screen.logicalXDPI) { ratio = screen.deviceXDPI / screen.logicalXDPI; } } else if (window.outerWidth !== undefined && window.innerWidth !== undefined) { ratio = window.outerWidth / window.innerWidth; }

  if (ratio){
    ratio = Math.round(ratio * 100);
  }
  //ratio就是获取到的百分比
  console.log(ratio)
  this.onresize_height = ratio
  // return ratio;
},

}

/* 子集盒子的class */ .box { /*父级宽100vw,高100vh。子盒子宽高1920*1080可以做大屏显示居中缩放 */ width: 100vw; height: 100vh; background-color: red; color: #fff; /* 更改转换元素的位置 transform-origin: left top; */ /* 超出隐藏 */ overflow-y: hidden; } html,body{ width: 100%; height: 100%; overflow-x:hidden; overflow-y:hidden; }