持续创作,加速成长!这是我参与「掘金日新计划 · 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%
可以看到依然没有问题: