当前位置:首页 > VUE

vue实现全局遮罩层

2026-02-09 17:20:08VUE

实现全局遮罩层的方案

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

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

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

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状态:

vue实现全局遮罩层

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

调用方式:

// 显示遮罩
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实现多选联动的方法 使用v-model绑定数组 在Vue中,可以通过v-model绑定一个数组来实现多选联动。当复选框被选中或取消选中时,数组会自动更新。 <template>…

vue实现选区

vue实现选区

Vue 实现选区的基本方法 在Vue中实现选区功能通常涉及DOM操作和事件处理。以下是几种常见的方法: 使用原生JavaScript的Selection API 通过window.getSelec…

vue实现引导

vue实现引导

Vue 实现引导功能的方法 使用第三方库 推荐使用 driver.js 或 intro.js 这类专门为 Vue 设计的引导库。这些库提供了完整的 API 和样式,能够快速实现引导功能。 安装 d…

vue实现socket

vue实现socket

Vue 中实现 WebSocket 通信 在 Vue 项目中实现 WebSocket 通信可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种常…

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直接…

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListe…