当前位置:首页 > VUE

vue遮罩层实现

2026-03-30 12:45:24VUE

实现遮罩层的基本方法

在Vue中实现遮罩层可以通过CSS和Vue指令结合完成。常见的遮罩层通常是一个半透明的全屏层,用于覆盖页面内容并阻止用户交互。

创建遮罩层组件:

<template>
  <div class="mask" v-if="visible" @click.self="handleClose">
    <slot></slot>
  </div>
</template>

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

<style scoped>
.mask {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  z-index: 999;
}
</style>

使用遮罩层组件

在父组件中使用遮罩层:

<template>
  <div>
    <button @click="showMask = true">显示遮罩层</button>
    <MaskLayer :visible.sync="showMask">
      <div class="content">这里是遮罩层内容</div>
    </MaskLayer>
  </div>
</template>

<script>
import MaskLayer from './MaskLayer.vue';

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

<style>
.content {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: white;
  padding: 20px;
  border-radius: 4px;
}
</style>

遮罩层动画效果

为遮罩层添加过渡动画可以提升用户体验:

<template>
  <transition name="fade">
    <div class="mask" v-if="visible" @click.self="handleClose">
      <slot></slot>
    </div>
  </transition>
</template>

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

防止滚动穿透

遮罩层显示时,通常需要禁止页面滚动:

<script>
export default {
  watch: {
    visible(val) {
      if (val) {
        document.body.style.overflow = 'hidden';
      } else {
        document.body.style.overflow = '';
      }
    }
  },
  beforeDestroy() {
    document.body.style.overflow = '';
  }
}
</script>

全局遮罩层实现

通过Vue插件方式实现全局遮罩层:

// mask.js
const Mask = {
  install(Vue) {
    const MaskConstructor = Vue.extend({
      template: '<div class="global-mask" v-show="visible"></div>',
      data() {
        return {
          visible: false
        }
      }
    });

    const instance = new MaskConstructor().$mount();
    document.body.appendChild(instance.$el);

    Vue.prototype.$mask = {
      show() {
        instance.visible = true;
      },
      hide() {
        instance.visible = false;
      }
    }
  }
};

export default Mask;

在main.js中使用:

import Mask from './mask';
Vue.use(Mask);

在组件中调用:

vue遮罩层实现

this.$mask.show(); // 显示全局遮罩层
this.$mask.hide(); // 隐藏全局遮罩层

标签: vue遮罩层
分享给朋友:

相关文章

vue实现选中单元格

vue实现选中单元格

Vue 实现选中单元格的方法 基础实现思路 在 Vue 中实现选中单元格功能,通常可以通过动态绑定 class 或 style 来实现。以下是一个基于表格的简单实现示例: <template&…

vue实现拖放

vue实现拖放

Vue 实现拖放功能 Vue 中实现拖放功能通常可以通过 HTML5 的原生拖放 API 或第三方库(如 vuedraggable)来实现。以下是两种方法的详细说明。 使用 HTML5 原生拖放 A…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在模…

vue实现下拉实现

vue实现下拉实现

Vue 实现下拉菜单的方法 使用原生 HTML 和 Vue 指令 通过 Vue 的 v-model 和 v-show 指令可以快速实现下拉菜单。定义一个布尔值控制下拉菜单的显示与隐藏,点击按钮切换状态…

简单实现vue github

简单实现vue github

实现一个简单的 Vue 项目并上传到 GitHub 创建 Vue 项目 使用 Vue CLI 快速初始化一个 Vue 项目,确保已安装 Node.js 和 npm/yarn。运行以下命令创建项目:…

vue 实现异步加载

vue 实现异步加载

Vue 实现异步加载的方法 使用动态 import 实现组件懒加载 在 Vue 中可以通过动态 import() 语法实现组件的异步加载,这会使得组件在需要时才被加载,减少初始加载时间。 const…