vue遮罩层实现
实现 Vue 遮罩层的方法
使用 CSS 和 v-show/v-if 控制显示
在 Vue 中可以通过 v-show 或 v-if 指令动态控制遮罩层的显示隐藏。创建一个全屏固定的遮罩层元素,通过绑定变量控制其状态。
<template>
<div>
<button @click="showMask = true">显示遮罩层</button>
<div
v-show="showMask"
class="mask"
@click="showMask = false"
></div>
</div>
</template>
<script>
export default {
data() {
return {
showMask: false
}
}
}
</script>
<style>
.mask {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
z-index: 999;
}
</style>
使用过渡动画增强体验
为遮罩层添加过渡效果可以使显示隐藏更加平滑。Vue 的 <transition> 组件可以方便地实现这一效果。
<template>
<div>
<button @click="showMask = true">显示遮罩层</button>
<transition name="fade">
<div
v-show="showMask"
class="mask"
@click="showMask = false"
></div>
</transition>
</div>
</template>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.3s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
</style>
结合弹窗组件使用
遮罩层通常与弹窗组件一起使用,可以通过组件化的方式封装遮罩层和弹窗内容。
<template>
<div>
<button @click="showModal = true">打开弹窗</button>
<modal v-show="showModal" @close="showModal = false">
<p>弹窗内容</p>
</modal>
</div>
</template>
<script>
import Modal from './Modal.vue'
export default {
components: { Modal },
data() {
return {
showModal: false
}
}
}
</script>
Modal.vue 组件示例
<template>
<div class="modal-wrapper">
<div class="modal-mask" @click="$emit('close')"></div>
<div class="modal-container">
<slot></slot>
</div>
</div>
</template>
<style>
.modal-wrapper {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.modal-mask {
position: absolute;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
}
.modal-container {
position: relative;
background: white;
padding: 20px;
border-radius: 4px;
z-index: 1001;
}
</style>
注意事项

- 确保遮罩层的
z-index值合理,避免被其他元素覆盖 - 移动端需要考虑点击穿透问题,必要时阻止事件冒泡
- 遮罩层显示时通常需要禁止页面滚动,可以通过给
body添加overflow: hidden实现 - 性能优化:频繁切换显示时使用
v-show,不频繁切换时使用v-if






