关于Vue前端页面缩放比导致的页面错乱问题

1,750 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

前言

本来昨天是要更新一下,关于咱们WhiteHole登录注册的模块的做法的,之后再说咱们的auto2.0认证的。 但是由一个bug,也就是老问题了,就是前端页面的一个缩放比导致的页面排版的错乱问题。加上论文的一些事情给耽误了,所以没搞完,稍晚一些时候更新。

那么咱们先来聊聊这个页面的问题。

百分比问题

首先我们来看到正常的页面 在这里插入图片描述 我是使用我自己的笔记本开发的,所以缩放比是125% 在这里插入图片描述 所以虽然说在浏览器里面显示的是100%但是实际上和系统是一样的都是自己缩放到了125%。所以这导致了一个问题,那就是咱们的页面只有在缩放比为125%的时候才正常。如果切换为100%,或者150%这样的屏幕上直接裂开。

限制缩放

由于在前期的时候没有好好考虑到这个问题,所以的话,很难直接进行完整的修改,这里有不少的解决方案,但是通过使用之后都没达到我想要的效果。 所以既然我在125%下面的显示是没有问题的,那么我为什么不可以直接限制浏览器静止对页面进行缩放捏。

感谢万能的搜素引擎。

我们只需要监听一下页面的缩放事件然后禁止它,让我们的缩放比例始终保持在我们预期的比例内。

/**
 * @description 校正windows页面在系统进行缩放后导致错乱的问题
 * **/

class DevicePixelRatio {
  constructor() {
    //this.flag = false;
  }
  //获取系统类型
  _getSystem() {
    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() {
    let t = this;

    document.getElementsByTagName('body')[0].style.zoom = 1.25 / 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;

重点是这句话:

 document.getElementsByTagName('body')[0].style.zoom = 1.25 / window.devicePixelRatio;

我的电脑是125%比例缩放,所以这里取值是1.25,如果你的电脑是在100%下的话,你取值为1.0即可。

之后再你想要的页面这样:

在这里插入图片描述

import DevicePixelRatio from "xx/xxx/./DevicePixelRatio";
  created() {
    new DevicePixelRatio().init();
  },

我的话是全部都禁止,所以的话我是在App.vue里面写。

效果

之后我们来看看效果 在这里插入图片描述

在改变了缩放比的情况下依然稳定。接下来调分辨率为100% 在这里插入图片描述

可以看到依然没有问题: 在这里插入图片描述