最近在自适应上做了很多功夫
其中有一个是,在使用element-plus的el-dialog时,在pc端和在手机端打开,由于屏幕宽度的不同,我希望el-dialog的宽度是不一样的。
而el-dialog设置宽度是通过width属性,直接用%来相对窗口设置宽度。
我先后尝试了媒体查询,监听屏幕宽度和监听视口宽度来自适应。
1️⃣首先,直接给el-dialog设置自定义class结合媒体查询是无效的,直接设置el-dialog的样式属性无效。
@media (max-width: 800px) {
/* 当屏幕宽度小于等于800px时 */
.el-dialog1{
width: 90%;
}
}
@media (min-width: 1000px) and (max-width: 1250px) {
.el-dialog1{
width: 60%;
}
}
@media (min-width: 1250px) {
.el-dialog1{
width: 50%;
}
}
2️⃣监听屏幕宽度window.innerWidth
通过获取window.innerWidth进行判断然后动态设置width属性
可以让我实现手机打开和pc端打开是不同的宽度。
html
<el-dialog v-model="data.dialogVisible" title="" :width="data.width1">
//...
</el-dialog>
javascript
onMounted(() => {
if(window.innerWidth <= 1000){
data.width1 = "80%";
}else{
data.width1 = "50%";
}
});
但是!这只是获取你操作屏幕的宽度,并不是你窗口的宽度。
当我在pc端用浏览器打开页面,并缩小窗口时,并不会触发宽度的变化。因为window.innerWidth获取的一直都是你设备的宽度。
3️⃣监听视口/窗口宽度document.documentElement.clientWidth;
这时候,改变窗口大小,获取到的宽度就会随之改变了。
但每次窗口修改时我需要刷新才会重新触发修改width的操作,所以这里我再加了个监听视口变化的操作。
javascript
onMounted(() => {
// 添加 resize 事件监听器
window.addEventListener("resize", watchWidth);
});
watchWidth就是我获取document.documentElement.clientWidth修改width的方法。
这样子再经过调试就可以实现想要的手机电脑自适应效果了。