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

vue实现driver

Vue 实现 Driver.js 引导功能 Driver.js 是一个轻量级的 JavaScript 库,用于在网页上创建引导式导览。以下是在 Vue 项目中集成 Driver.js 的详细方法:…

vue实现标题

vue实现标题

Vue 实现标题的方法 在Vue中实现标题可以通过多种方式,以下是几种常见的方法: 方法一:使用模板语法 在Vue组件的模板中直接使用HTML的<h1>到<h6>标签来定义…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…

vue实现滚屏

vue实现滚屏

实现滚屏的基本方法 在Vue中实现滚屏效果可以通过多种方式完成,常见的有原生JavaScript滚动方法、第三方库或CSS动画。以下是几种常见实现方式: 使用window.scrollTo或Elem…

vue实现分站

vue实现分站

Vue 实现分站的方案 在 Vue 中实现分站功能通常涉及路由配置、环境变量管理和动态加载资源。以下是几种常见的实现方式: 基于路由的分站实现 通过 Vue Router 配置多路由,区分不同站点的…