欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > ScreenFull局部全屏中的弹框问题

ScreenFull局部全屏中的弹框问题

2025/2/24 2:52:37 来源:https://blog.csdn.net/weixin_47925230/article/details/144612718  浏览:    关键词:ScreenFull局部全屏中的弹框问题

最近做了一个驾驶舱大屏需求,用的若依框架,若依本身有一个全屏按钮,需要再给驾驶舱加一个全屏按钮,单独全屏驾驶舱,不要侧边栏导航栏。思路如下:

  1. 使用screenFull组件,直接调用全屏方法使大屏dom全屏展示
<template><div class="app-container" ref="cockpitRef"><div id="top-header"><div class="center-title"></div><el-button class="screen-full-btn" @click="toggleFullscreen()"><svg-icon :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"/></el-button></div><div class="main-content"></div></div>
</template>
export default {name: "Cockpit",data() {return {isFullscreen: false,};},mounted() {if (screenfull.isEnabled) {screenfull.on("change", this.handleChange);}},beforeDestroy() {if (screenfull.isEnabled) {screenfull.off("change", this.handleChange);}},methods: {// 全屏toggleFullscreen() {if (!screenfull.isEnabled) {this.$message({ message: "你的浏览器不支持全屏", type: "warning" });return false;}screenfull.toggle(this.$refs.cockpitRef);},handleChange() {this.isFullscreen = screenfull.isFullscreen;},},
};
  1. 似乎没有问题,但是大屏中有很多Element UI的时间选择器、下拉框、popover等弹框,这些弹框全部显示不出来了!

    试图解决,查询到给弹框组件加:append-to-body="false"等类似属性。因为弹框原本是挂载在body上的, 但是我是全屏了局部的dom,全屏之后的dom元素层级是最高的,不管popover设置多大的z-index都没有用,所以要加这个属性让他不挂载在body上,这样弹框就显示出来了。

    但是这样又出现了一些问题:

  • 弹框全屏后位置不对,没有紧挨着输入框。对比了一下dom,发现弹框挂载在body上时,弹框是相对于输入框绝对定位,而不挂载在body上时,弹框变成了fixed定位。所以我加了一个样式试图去控制弹框的定位:
::v-deep .el-popper {//由于页面单独全屏后会导致position变成fixed,导致popover显示出现问题,所以加上强制absoluteposition: absolute !important;
}
  • 加上这个属性后,弹框的dom位置在点击元素的下面。这个大屏里面有几个自定义组件,组件里面发现弹框的位置被限制在了组件内,会导致弹框出现一些不受控制的换行和显示不全的问题,这个问题可以通过强制修改定位解决,虽说不太好
  • 时间选择器、下拉框的位置无法自动根据空间是否足够自动调整placement。明明下面已经没有空间了,他还在下面展示。el-popover也是,placement属性失效了
  1. 又碰到了一个问题:全屏功能失效,无法去除浏览器自带操作栏和窗口啥的,关闭控制台恢复
  2. 碰到了这么多无法解决的问题后,我还在孜孜不倦地试图解决问题,哪怕这些问题很可能都是popper.js组件的问题(也就是Element UI弹框的底层实现弹窗)真的很佩服自己,勤勤恳恳地查了一天怎么解决,调用popper的update方法,用appendChild挂载这那的,想了很多办法,但是始终没有换思路。

实在解决不了了去找了领导,领导考虑了半天让我尝试一下换思路。不全屏cockpit dom,而是全屏整个body,然后用fixed定位强制全屏显示cockpit dom,这样就不存在弹框的这些问题了

具体解决方法后续再写吧 累了 收拾收拾准备美美过周末了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词