当前位置:首页 > VUE

vue实现全局遮罩层

2026-03-27 02:09:38VUE

vue实现全局遮罩层的方法

使用Vue指令实现

创建自定义指令v-mask,在指令中动态生成遮罩层DOM元素并控制显示隐藏。这种方法适合局部或全局复用。

vue实现全局遮罩层

// 全局注册指令
Vue.directive('mask', {
  inserted: function(el, binding) {
    const mask = document.createElement('div')
    mask.className = 'global-mask'
    mask.style.cssText = `
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background: rgba(0,0,0,0.5);
      z-index: 9999;
      display: ${binding.value ? 'block' : 'none'};
    `
    el.dataset.maskId = 'mask_' + Date.now()
    document.body.appendChild(mask)
  },
  update: function(el, binding) {
    const mask = document.querySelector('.global-mask')
    if (mask) mask.style.display = binding.value ? 'block' : 'none'
  }
})

// 使用方式
<div v-mask="isShowMask"></div>

通过Vue插件封装

将遮罩层封装为Vue插件,通过this.$mask.show()this.$mask.hide()全局调用。

vue实现全局遮罩层

const MaskPlugin = {
  install(Vue) {
    const mask = {
      show() {
        let mask = document.querySelector('.global-mask')
        if (!mask) {
          mask = document.createElement('div')
          mask.className = 'global-mask'
          mask.style.cssText = `
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0,0,0,0.5);
            z-index: 9999;
          `
          document.body.appendChild(mask)
        }
      },
      hide() {
        const mask = document.querySelector('.global-mask')
        if (mask) document.body.removeChild(mask)
      }
    }
    Vue.prototype.$mask = mask
  }
}

Vue.use(MaskPlugin)

使用组件+状态管理

结合Vuex创建全局状态控制的遮罩组件,适合中大型项目。

// store.js
state: {
  showMask: false
},
mutations: {
  SET_MASK(state, payload) {
    state.showMask = payload
  }
}

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

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

// 调用方式
this.$store.commit('SET_MASK', true)

动态组件实现

创建可编程式调用的动态组件,通过服务方式控制显示。

// maskService.js
let maskInstance

export default {
  show() {
    if (!maskInstance) {
      const MaskComponent = Vue.extend({
        template: '<div class="global-mask"></div>'
      })
      maskInstance = new MaskComponent().$mount()
      document.body.appendChild(maskInstance.$el)
    }
  },
  hide() {
    if (maskInstance) {
      document.body.removeChild(maskInstance.$el)
      maskInstance = null
    }
  }
}

// 使用方式
import maskService from './maskService'
maskService.show()

每种实现方式各有优劣,可根据项目规模选择合适方案。指令方式适合简单需求,插件和组件方式更适合复杂场景,动态组件服务方式则提供了最大灵活性。

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

相关文章

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue实现注册

vue实现注册

Vue 实现注册功能 注册功能通常涉及前端表单、数据验证、与后端 API 的交互等步骤。以下是一个完整的 Vue 实现注册功能的方案。 创建注册表单 使用 Vue 的模板语法创建注册表单,包含用户名…

vue键盘实现

vue键盘实现

监听键盘事件 在Vue中监听键盘事件可以通过v-on指令或@缩写实现。常见的键盘事件包括keydown、keyup和keypress。例如监听回车键事件: <template> &l…

vue实现搜索查询

vue实现搜索查询

Vue 实现搜索查询的方法 双向绑定实现实时搜索 在Vue中可以通过v-model绑定输入框的值,结合计算属性或watch监听输入变化实现实时搜索。 <template> <i…

vue实现前端路由

vue实现前端路由

Vue 实现前端路由的方法 Vue 可以通过 Vue Router 实现前端路由管理。以下是具体实现步骤: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Router: n…

vue 路由实现

vue 路由实现

Vue 路由实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue 路由的基本步骤: 安装 Vue Router 使用 npm 或 ya…