其实是一个很简单的问题,但不知道为什么网上没人写
最近写项目的时候遇到了一个问题,el-popover
想要效果和el-dialog
类似,即背后有一个蒙层,可以通过点击蒙层来关闭popover(因为在popover上又有一了个popover,需要点击外面先关闭第二个popover再关闭第一个popover,因为popover监听的是点击事件来关闭,所以需要通过蒙层的方式说动关闭)。
一开始的时候想要直接通过修改z-index
来实现,但这样会存在
- 当会话过期时,
dialog
会遮住退出提示 message
会在dialog-mask
下面,交互不太好- 当你在
dialog
中使用el-select
等组件的时候,显示内容在下面 - 代码稳定性不高,虽然10000基本不会遇到
因此我们需要这个对话框的z-index
也能够动态添加
解决这个问题首先要知道element/antd
等框架的z-index
逻辑,
组件库内部维护了一个z-index
值,如Element
默认为2000,每次element
的对话框弹出的时候,都会获得该z-index
并增加,所以,我们需要找到element的这个接口并调用该接口
(不知道为什么,网上找了好久,要么是vue2的解决方案,要么就是文不对题,也可能本身这个需求也比较偏)
<div class="drop-down-mask" :style="{'zIndex':zIndex.nextZIndex()}"></div>
<script setup>
import { useZIndex } from 'element-plus'
const zIndex = useZIndex()
console.log(zIndex.nextZIndex()) //默认2001
console.log(zIndex.nextZIndex()) //默认2002
</script>
Q.E.D.