当前位置:首页 > VUE

vue 实现遮罩

2026-01-13 02:14:09VUE

Vue 实现遮罩层的方法

基础遮罩实现

通过CSS和Vue的v-showv-if指令控制遮罩显示。创建一个全屏固定的div作为遮罩层,设置半透明背景色:

vue 实现遮罩

<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-color: rgba(0, 0, 0, 0.5);
  z-index: 999;
}
</style>

带内容的模态框

在遮罩层上添加内容区域,点击遮罩关闭但点击内容区域不关闭:

vue 实现遮罩

<template>
  <div>
    <div 
      v-show="showModal"
      class="mask"
      @click.self="showModal = false"
    >
      <div class="modal-content">
        <h3>模态框标题</h3>
        <p>这里是模态框内容</p>
      </div>
    </div>
  </div>
</template>

<style>
.modal-content {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: white;
  padding: 20px;
  z-index: 1000;
}
</style>

动画过渡效果

使用Vue的<transition>组件实现淡入淡出效果:

<transition name="fade">
  <div 
    v-show="showMask"
    class="mask"
  ></div>
</transition>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.3s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

全局遮罩组件

创建可复用的遮罩组件,通过props控制显示状态:

<!-- Mask.vue -->
<template>
  <transition name="fade">
    <div 
      v-show="visible"
      class="mask"
      @click="handleClick"
    >
      <slot></slot>
    </div>
  </transition>
</template>

<script>
export default {
  props: {
    visible: Boolean,
    closeOnClick: {
      type: Boolean,
      default: true
    }
  },
  methods: {
    handleClick() {
      if (this.closeOnClick) {
        this.$emit('update:visible', false)
      }
    }
  }
}
</script>

使用示例

<template>
  <div>
    <button @click="isVisible = true">显示遮罩</button>
    <Mask 
      :visible.sync="isVisible"
      :closeOnClick="true"
    >
      <div class="modal">自定义内容</div>
    </Mask>
  </div>
</template>

<script>
import Mask from './Mask.vue'

export default {
  components: { Mask },
  data() {
    return {
      isVisible: false
    }
  }
}
</script>

这些方法提供了从基础到高级的遮罩实现方案,可根据具体需求选择合适的实现方式。

标签: vue
分享给朋友:

相关文章

vue实现摘要

vue实现摘要

Vue 实现摘要的方法 在 Vue 中实现文本摘要功能通常涉及截取文本的前部分内容并添加省略号。可以通过计算属性、过滤器或自定义指令来实现。 计算属性实现 在 Vue 组件中定义一个计算属性,用于截…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

javascript实现vue

javascript实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,主要包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化的实现示例。 数据响应式系统 通过 Object.de…

利用vue 实现

利用vue 实现

以下是利用 Vue 实现常见功能的几种方法,分为不同场景和技术要点: 数据绑定与响应式更新 Vue 的核心特性是数据绑定,通过 v-model 实现双向绑定: <template>…

vue 绑定实现

vue 绑定实现

Vue 绑定实现 Vue 提供了多种数据绑定的方式,包括文本插值、属性绑定、事件绑定、双向绑定等。以下是常见的绑定实现方法: 文本插值 使用双大括号 {{ }} 进行文本插值,将数据动态渲染到 DO…

vue实现发帖

vue实现发帖

使用 Vue 实现发帖功能 前端实现 创建发帖表单组件,包含标题和内容输入框,以及提交按钮。使用 v-model 绑定表单数据。 <template> <div>…