当前位置: 代码网 > it编程>编程语言>Javascript > 前端element-ui两层dialog嵌套遮罩层消失的问题解决办法

前端element-ui两层dialog嵌套遮罩层消失的问题解决办法

2024年09月07日 Javascript 我要评论
背景总觉得element-ui dialog的遮罩层逻辑有点晦涩,当一个dialog内嵌另一个dialog时,它的遮罩层却始终只有一个,也就是下方class="v-modal"的d

背景

总觉得element-ui dialog的遮罩层逻辑有点晦涩,当一个dialog内嵌另一个dialog时,它的遮罩层却始终只有一个,也就是下方class="v-modal"的div。

可以看到, v-modal的层级总是比dialog低一层。

问题

当两层dialog为直接父子关系时, 我们可以简单的使用其属性append-to-body, modal-append-to-body来解决问题:

  • 如,第二层dialog内容被遮罩层覆盖。
<el-dialog>
...
	<el-dialog>
	</el-dialog>
</el-dialog>

但是,当两层dialog不是直接父子关系, 你可能会碰到关闭dialog2时,回到dialog1后,遮罩层消失的问题。

推测:

  • 关闭dialog时, 隐藏遮罩层的逻辑是有延迟的,可能(几十毫秒)。
  • 关闭dialog2时,element会为dialog1动态添加一个v-modal的遮罩层。
  • 在特定情况下,上述 逻辑1 会晚于 逻辑2 ., 导致dialog1的遮罩层消失
<el-dialog ref="dialog1">
...
	<el-tab>
		...
			<el-dialog ref="dialog2">
			</el-dialog>
	<el-tab>
</el-dialog>

解决思路

回到dialog1时, 手动判断 v-modal遮罩层是否存在,没有则添加。

      // 解决dialog嵌套,从第二层返回后,遮罩层消失的问题
      addmodaldivifnotexists() {
        // 获取dialog的父级div
        const parentdiv = this.$refs.parentdiv;
        // 获取dialog
        const dialog = this.$refs.dialog
        // 检查是否已存在class为"v-modal"的div
        const existingmodaldiv = parentdiv.queryselector('.v-modal');
        if (!existingmodaldiv) {
          // 如果不存在,则创建一个新的div
          const newmodaldiv = document.createelement('div');
          newmodaldiv.classlist.add('v-modal');
          // 设置z-index
          const parentzindex = dialog.$el.style.zindex
          newmodaldiv.style.zindex = number(parentzindex) - 1
          // 将新的div添加到父级div中
          parentdiv.appendchild(newmodaldiv);
        }
      },

题外话

使用ant design vue的modal时, 似乎没有碰到类似问题

总结

到此这篇关于前端element-ui两层dialog嵌套遮罩层消失的问题解决的文章就介绍到这了,更多相关element-ui两层dialog嵌套遮罩层消失内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com