vue中调用全屏方法、 elementUI弹框在全屏模式下不出现问题、多级嵌套弹框蒙层遮挡问题等处理与实现方案

devtools/2024/11/16 7:12:27/

全屏模式下弹框不展示的原因是elementUI的弹框我们让他挂在body中了,而我们全屏的div盒子不是整个文档,这时候就找不到弹框了。
当我们把弹框改为插入到父元素上

在这里插入图片描述

这时候会出现蒙层盖住整个页面,什么也点不了的问题。 这是elementUI官方的一个bug,
解决方案,需把父弹框挂在body中。这时候就有点无解了。
这个多级嵌套问题之前写过一篇文章解决,链接:解决多层弹框嵌套蒙层遮住问题超链接

先介绍最优的方案,然后再介绍一种不太好的方案(为啥说不好呢,因为它是操作dom,会导致只要切换全屏、退出全屏,整个页面就进行重排重绘)

最优方案

实现思路,利用样式,使用当前的这个大屏页面的盒子脱离文档流; 全屏的时候使body全屏,而不是当前大屏页面的大盒子。
给大屏页面的盒子加上动态样式, 高宽都设置铺满,这样就盖住了layout部分了。

:class="{ 'fullMapWrapper': isFullScreen }"// 全屏外层div
.map-wrapper.fullMapWrapper {position: fixed !important;width: 100vw !important;height: 100vh !important;z-index: 1500 !important;top: 0 !important;left: 0 !important;
}

全屏,退出全屏部分的代码

 <!--  全屏按钮  -->
<div class="fullMap"><i class="el-icon-full-screen" @click="fullMap()"></i></div>data() {return {isFullScreen: false, // 是否全屏}},/** 全屏 */fullMap() {this.isFullScreen = !this.isFullScreen;//判断是否处于全屏模式if(document.fullscreenElement) {//退出全屏document.exitFullscreen();this.isFullScreen = false;//处于全屏模式的元素// console.log(document.fullscreenElement);   //null}else {//全屏显示, 让body全屏document.body.requestFullscreen();this.isFullScreen = true//处于全屏模式的元素// console.log(document.fullscreenElement);   //<html lang="en">......</html>}},

这样就完美解决的问题,也没后遗症。

下面说下另外一个不好方案的思路, 就是创建一个新元素, 手动的把当前的大屏的dom节点append到新元素上,
再讲新元素append到body里达到这个目的。 (但是我们会发现,appendChild这个是移动dom节点,
第一次切换全屏,再切换来,会发现页面空白。原本的dom跑了) 这样我们只能频繁的去append dom节点。页面就反复进行重绘重排
这个全屏是基于大屏的div

let parentDom = null
let mapDiv = nullmounted() {parentDom = document.createElement('div'); // 创建一个新的元素mapDiv = document.getElementById('map-wrapper')parentDom.id = 'bodyDiv'parentDom.classList.add("parent-div");parentDom.style.height = '100%'parentDom.style.width = '100%'parentDom.appendChild(mapDiv)document.body.appendChild(parentDom) // 将元素添加到body中parentDom.style.display = 'none'// 这个是当前大屏页面的上一个盒子document.getElementsByClassName('main-container-box')[0].appendChild(mapDiv)},方法
/** 全屏 */fullMap() {this.isFullScreen = !this.isFullScreen;if(document.fullscreenElement) { // 全屏模式let bodyDiv = document.getElementById('bodyDiv')if(bodyDiv) {bodyDiv.style.display = 'none'}document.getElementById('app').style.display = 'block'// 这个是当前大屏页面的上一个盒子document.getElementsByClassName('main-container-box')[0].appendChild(mapDiv)//   //退出全屏document.exitFullscreen(); // 退出全屏} else {document.getElementById('app').style.display = 'none'parentDom.appendChild(mapDiv)parentDom.style.display = 'block'document.body.requestFullscreen(); // 打开全屏}},

http://www.ppmy.cn/devtools/134372.html

相关文章

【使用antv g6实现拓扑图】

使用antv g6实现拓扑图 安装antv g6创建一个 div&#xff0c;并制定必须的属性 id定义初始化方法定义node节点数据将获取到的数据渲染进页面 安装antv g6 npm install antv/g6 --save import G6 from antv/g6;创建一个 div&#xff0c;并制定必须的属性 id 定义好展示id&…

三正科技笔试题

&#xff08;15题&#xff0c;45分钟&#xff0c;闭卷&#xff09; 一、( 8 分 &#xff09;请问以下程序输出什么结果&#xff1f; char *getStr(void) 。 &#xff5b; char p[] "hellow world"; return p; &#xff5d; void test(void) &#xff5b; ch…

(一)<江科大STM32>——软件环境搭建+新建工程步骤

一、软件环境搭建 &#xff08;1&#xff09;安装 Keil5 MDK 文件路径&#xff1a;江科大stm32入门教程资料/Keil5 MDK/MDK524a.EXE&#xff0c;安装即可&#xff0c;路径不能有中文。 &#xff08;2&#xff09;安装器件支持包 文件路径&#xff1a;江科大stm32入门教程资料…

Django 2024全栈开发指南(三):数据库模型与ORM操作(上篇)

目录 一、模型的定义二、数据迁移三、数据表关系四、数据表操作4.1 Shell工具4.2 数据新增4.3 数据修改4.4 数据删除4.5 数据查询 Django 对各种数据库提供了很好的支持&#xff0c;包括 PostgreSQL、MySQL、SQLite 和 Oracle&#xff0c;而且为这些数据库提供了统一的 API 方法…

分布式----Ceph部署

目录 一、存储基础 1.1 单机存储设备 1.2 单机存储的问题 1.3 商业存储解决方案 1.4 分布式存储&#xff08;软件定义的存储 SDS&#xff09; 1.5 分布式存储的类型 二、Ceph 简介 三、Ceph 优势 四、Ceph 架构 五、Ceph 核心组件 #Pool中数据保存方式支持两种类型&…

【Git从入门到精通】——Git分支介绍与GitHub相关知识总结

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

Java项目实战II基于微信小程序的订餐系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导 一、前言 随着移动互联网技术的飞速发展&#xff0…

鸿蒙生态:开发者的新征程与挑战并存

随着科技的飞速发展&#xff0c;我们迎来了一个新的时代——鸿蒙系统的时代。作为开发者&#xff0c;我有幸见证了鸿蒙生态的崛起&#xff0c;并亲身参与其中。今天&#xff0c;我想和大家分享我对鸿蒙生态的认知&#xff0c;以及在这一生态下开发时遇到的挑战和我的应对策略。…