当前位置:首页 > VUE

vue实现封锁页面

2026-02-16 23:24:05VUE

Vue 实现页面封锁的方法

在 Vue 中实现页面封锁通常用于阻止用户在某些操作未完成或权限不足时访问特定内容。以下是几种常见实现方式:

使用全局路由守卫

通过 Vue Router 的导航守卫拦截未授权访问:

// router.js
router.beforeEach((to, from, next) => {
  const isLocked = store.getters.isPageLocked // 从Vuex获取锁定状态
  if (to.meta.requiresUnlock && isLocked) {
    next('/locked-page') // 跳转到锁定提示页
  } else {
    next()
  }
})

路由配置需添加元信息:

{
  path: '/protected',
  component: ProtectedPage,
  meta: { requiresUnlock: true }
}

组件级条件渲染

在组件内部通过 v-if 控制内容显示:

<template>
  <div>
    <div v-if="!isLocked">
      <!-- 正常内容 -->
    </div>
    <lock-screen v-else />
  </div>
</template>

<script>
export default {
  computed: {
    isLocked() {
      return this.$store.state.isLocked
    }
  }
}
</script>

全局遮罩层组件

创建可复用的锁屏组件:

<!-- LockScreen.vue -->
<template>
  <div class="lock-screen">
    <div class="overlay"></div>
    <div class="content">
      <h3>操作受限</h3>
      <p>当前页面已被锁定,请完成前置操作</p>
      <button @click="handleUnlock">解锁</button>
    </div>
  </div>
</template>

<style>
.lock-screen {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 9999;
}
.overlay {
  background: rgba(0,0,0,0.7);
  position: absolute;
  width: 100%;
  height: 100%;
}
.content {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: white;
  padding: 2rem;
  border-radius: 8px;
}
</style>

状态管理集成

通过 Vuex 集中管理锁定状态:

// store.js
export default new Vuex.Store({
  state: {
    lockedPages: []
  },
  mutations: {
    lockPage(state, pageName) {
      if (!state.lockedPages.includes(pageName)) {
        state.lockedPages.push(pageName)
      }
    },
    unlockPage(state, pageName) {
      state.lockedPages = state.lockedPages.filter(p => p !== pageName)
    }
  }
})

浏览器事件拦截

阻止默认行为增强锁定效果:

vue实现封锁页面

mounted() {
  if (this.isLocked) {
    window.addEventListener('keydown', this.preventNavigation)
    window.addEventListener('beforeunload', this.confirmUnload)
  }
},
methods: {
  preventNavigation(e) {
    if ([8, 116].includes(e.keyCode)) { // 阻止后退和刷新
      e.preventDefault()
    }
  },
  confirmUnload(e) {
    e.preventDefault()
    return e.returnValue = '离开后未保存的数据将丢失'
  }
}

注意事项

  • 敏感操作建议结合后端验证,前端封锁仅作为辅助
  • 清除锁定状态时需同步移除事件监听
  • 移动端需额外考虑 touch 事件拦截
  • 提供清晰的解锁指引给用户

以上方法可根据实际需求组合使用,建议通过 Vuex 集中管理锁定状态以保证应用状态一致性。

标签: 页面vue
分享给朋友:

相关文章

vue手写签名如何实现

vue手写签名如何实现

实现手写签名的基本思路 在Vue中实现手写签名功能,通常需要借助HTML5的Canvas API来捕获用户的绘制操作。核心流程包括初始化画布、监听触摸/鼠标事件、记录轨迹以及生成签名图片。…

vue实现下拉刷新组件

vue实现下拉刷新组件

实现下拉刷新组件的核心思路 下拉刷新功能通常通过监听触摸事件、滚动位置和动画效果实现。Vue中可以利用自定义指令或封装组件完成,以下为两种常见实现方式。 基于自定义指令的实现 创建指令监听触摸事件,…

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <v…

vue mvvm 实现

vue mvvm 实现

Vue MVVM 实现原理 Vue.js 的 MVVM(Model-View-ViewModel)架构通过数据绑定和响应式系统实现视图与数据的自动同步。以下是其核心实现机制: 数据劫持与响应式系统…

vue源码实现

vue源码实现

Vue 源码实现解析 Vue.js 的核心实现可以分为响应式系统、虚拟 DOM、模板编译、组件化等几个关键部分。以下是对这些核心机制的详细解析。 响应式系统 Vue 的响应式系统基于 Object.…