当前位置:首页 > 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>

使用遮罩层组件

在父组件中使用遮罩层:

vue遮罩层实现

<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>

防止滚动穿透

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

vue遮罩层实现

<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);

在组件中调用:

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

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

相关文章

vue前端实现下载进度

vue前端实现下载进度

实现下载进度条的基本思路 在Vue中实现下载进度条,通常需要结合XMLHttpRequest或Fetch API来监听下载进度事件。通过计算已下载数据与总数据的比例,动态更新进度条的显示。 使用XM…

vue实现visual

vue实现visual

Vue 实现可视化(Visual)的常见方法 在 Vue 中实现可视化通常涉及数据可视化库的集成,以下是几种主流方案: 使用 ECharts ECharts 是一个强大的 JavaScript 图表…

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2ca…

vue实现oauth

vue实现oauth

Vue 实现 OAuth 的步骤 安装必要的依赖 确保项目中安装了 axios 和 vue-router。OAuth 通常需要发送 HTTP 请求和处理路由跳转。 npm install axios…

vue轮询实现

vue轮询实现

Vue 轮询实现方法 在 Vue 中实现轮询可以通过以下几种方式: 使用 setInterval data() { return { pollInterval: null } },…

vue原理实现

vue原理实现

Vue 原理实现的核心机制 Vue.js 的核心原理基于响应式系统、虚拟 DOM 和模板编译。以下是其核心实现机制的分解: 响应式系统 Vue 使用 Object.defineProperty(Vu…