Vue项目中,适配屏幕缩放比例为125% 或150%的方法
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue

·
方案一
- 监听页面的缩放比例,然后调整body的zoom值进行相应缩放;
- 方案可行;但是如果项目有引用第三方UI库或图表库这些的话,例如element,一些下拉选项框的位置会偏移;或者有echarts / g2图形的话,鼠标移入tooltip显示框的位置也会偏移,这些是我遇到的两个问题。
- element的偏移可以修改样式调整;图形的偏移未找到可行修复方法,echarts和g2的github上的Issues里有人也提到相关问题,答说:zoom 是一个非标准属性,建议避免使用.....
1. src/utils文件夹下新建devicePixelRatio.js文件
class DevicePixelRatio {
constructor() {
//this.flag = false;
}
//获取系统类型
_getSystem() {
let flag = false;
var agent = navigator.userAgent.toLowerCase();
//现只针对windows处理,其它系统暂无该情况,如有,继续在此添加
if (agent.indexOf("windows") >= 0) {
return true;
}
}
//监听方法兼容写法
_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;
//页面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;
2. 在app.vue中引入文件并使用
-
import DevicePixelRatio from './utils/devicePixelRatio'; export default { name: "App", created() { new DevicePixelRatio().init(); } };
方案二
- 使用rem单位,将px转为rem,可行;
- 项目所有单位都是px, 全部转为rem工程量巨大...弃了(笑哭)。
方案三
使用px2rem插件,网上搜到的解决方法。




vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:8 个月前 )
9e887079
[skip ci] 6 个月前
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 10 个月前
更多推荐
所有评论(0)