当前位置:首页 > VUE

vue实现全局遮罩层

2026-02-09 17:20:08VUE

实现全局遮罩层的方案

在Vue中实现全局遮罩层可以通过以下两种常见方式:

方案一:使用动态组件挂载

创建独立的遮罩层组件(如GlobalMask.vue):

<template>
  <div v-if="visible" class="global-mask">
    <!-- 遮罩内容 -->
  </div>
</template>

<script>
export default {
  data() {
    return {
      visible: false
    }
  },
  methods: {
    show() {
      this.visible = true
    },
    hide() {
      this.visible = false
    }
  }
}
</script>

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

通过插件方式全局注册:

// maskPlugin.js
import Vue from 'vue'
import MaskComponent from './GlobalMask.vue'

const Mask = {
  install(Vue) {
    const MaskConstructor = Vue.extend(MaskComponent)
    const instance = new MaskConstructor()
    instance.$mount(document.createElement('div'))
    document.body.appendChild(instance.$el)

    Vue.prototype.$mask = {
      show: () => instance.show(),
      hide: () => instance.hide()
    }
  }
}

Vue.use(Mask)

方案二:使用Vuex状态管理

定义Vuex状态:

// store.js
export default new Vuex.Store({
  state: {
    showMask: false
  },
  mutations: {
    SET_MASK(state, payload) {
      state.showMask = payload
    }
  }
})

在根组件中使用:

<template>
  <div>
    <div v-if="$store.state.showMask" class="global-mask"></div>
    <router-view/>
  </div>
</template>

调用方式:

vue实现全局遮罩层

// 显示遮罩
this.$store.commit('SET_MASK', true)

// 隐藏遮罩
this.$store.commit('SET_MASK', false)

样式优化建议

.global-mask {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(0, 0, 0, 0.6);
  z-index: 1000;
  display: flex;
  justify-content: center;
  align-items: center;
}

/* 添加加载动画示例 */
.mask-spinner {
  width: 40px;
  height: 40px;
  border: 4px solid #fff;
  border-radius: 50%;
  border-top-color: transparent;
  animation: spin 1s linear infinite;
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

注意事项

  • 遮罩层的z-index需要确保高于页面其他元素
  • 移动端需要考虑viewport单位兼容性
  • 长时间显示遮罩时应添加超时自动隐藏逻辑
  • 多个遮罩同时出现时需要处理层级关系

标签: 全局vue
分享给朋友:

相关文章

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…

vue实现横滚

vue实现横滚

Vue 实现横滚效果 横滚效果通常指水平滚动内容,常见于轮播图、横向导航栏等场景。以下是几种实现方式: 使用 CSS 和 Vue 结合 通过 CSS 的 overflow-x 和 white-spa…

vue实现keepalive

vue实现keepalive

Vue 中实现 keep-alive 在 Vue 中,keep-alive 是一个内置组件,用于缓存动态组件或组件的状态,避免重复渲染和销毁。以下是实现 keep-alive 的几种方法: 基本用法…

vue 实现vshow

vue 实现vshow

Vue 实现 v-show 在 Vue 中,v-show 是一个常用的指令,用于根据条件控制元素的显示或隐藏。与 v-if 不同,v-show 不会移除 DOM 元素,而是通过 CSS 的 displ…

vue搜索功能实现

vue搜索功能实现

Vue搜索功能实现方法 在Vue中实现搜索功能可以通过多种方式完成,以下是几种常见的方法: 使用计算属性实现搜索 计算属性非常适合处理需要根据输入值动态过滤数据的情况。创建一个计算属性,根据搜索关键…