页面弹窗适配问题

如果你正在边刷手机边蹲马桶,恭喜!这篇博客就是为你量身定制的。现在请擦擦手(真的,擦擦吧),我们要开始了。

故事的开始是因为昨天接到个新需求需要给页面加个弹窗,用elementPlus组件,弹窗是加上了,但是因为页面之前的适配方案导致弹窗在页面的最中间,而且缩放有问题,怎么办呢?上网找了找给弹窗加了个append-to-body属性,但是适配依旧有问题,接下来上代码

一、页面弹窗

注意:ref必须要加方便找到节点,align-center弹窗居中显示, transform控制弹窗缩放

复制代码
<el-dialog
      ref="myElement"
      v-model="dialogOpen.show"
      align-center
      :title="dialogOpen.name"
      width="900px"
      append-to-body
      :style="{
        transform: `scale(${scaleVal})`,
      }"
>
      <div
class="dialog-content"
>
        <div>
          <img src="@/assets/images/details_people.png" alt="">
        </div>
        <div>
          <img :src="qrCodeImage" alt="">
          <div style="font-size: 1rem;">请前往小程序使用该服务</div>
        </div>
      </div>
    </el-dialog>

二、js代码(控制缩放)

刚开始用的window.onresize监听缩放,后面发现会影响之前的页面缩放(页面用的就是这个缩放方案),改进了一版,用addEventListener去监听,效果差不多。

复制代码
const scaleVal = ref(1)
const myElement = ref(null);
const scaleValSet = () => {
  scaleVal.value = window.innerWidth / 1920;
};

watchEffect(() => {
  window.addEventListener('resize', () => {
    scaleValSet()
  })
})
// window.onresize = function () {
//   scaleValSet();
// };

三、补充(页面缩放方案除去弹窗)

页面缩放方案是在节点 "app-box" 整体用transform去缩放

复制代码
const baseWidth = 1920; //设计稿宽度%10 比如 1920

// 设置rem 函数
export function setRem() {
  const scale = window.innerWidth / baseWidth;
  const mainContent = document.getElementById("app-box");
  if (mainContent) {
    mainContent.style.transform = `scale(${scale})`;
    mainContent.style.width = baseWidth + "px";
    // mainContent.style.height = window.innerHeight / scale + "px";
  }
}
window.onresize = function () {
  setRem();
};

当然需要在main.js去引入

复制代码
import { setRem } from './rem.js' // rem适配

setTimeout(() => {
  setRem();
}, 0);

最后还需要在main.css加上一行代码

复制代码
#app-box {
  transform-origin: left top;
}
相关推荐
浏览器API调用工程师_Taylor18 分钟前
日报自动化实战:告别手动复制粘贴
前端·javascript·node.js
晴殇i23 分钟前
JavaScript还能这样写?!ES2025新语法让代码优雅到极致
前端·javascript·程序员
浏览器API调用工程师_Taylor33 分钟前
我是如何将手动的日报自动化的☺️☺️☺️
前端·javascript·爬虫
东哥很忙XH1 小时前
flutter开发的音乐搜索app
android·javascript·flutter
前端Hardy1 小时前
HTML&CSS&JS:抖音爆火的满屏“关心弹幕”酷炫卡片,已经帮你打包好了,快来体验吧!
前端·javascript·css
江城开朗的豌豆1 小时前
我的Vue项目胖成球了!用Webpack给它狠狠瘦个身
前端·javascript
WebInfra1 小时前
Rspack 1.6 发布:让打包产物更小、更纯净
前端·javascript·前端框架
Mintopia1 小时前
⚙️ Next.js 接口限流与审计全攻略 —— 用 @upstash/ratelimit 打造优雅“闸门”
前端·javascript·全栈
Mintopia2 小时前
🌐 实时翻译 + AIGC:Web跨语言内容生成的技术闭环
前端·javascript·aigc
Cache技术分享2 小时前
225. Java 集合 - List接口 —— 记住顺序的集合
前端·后端