JavaScript 实现页面自动锁屏与密码验证功能

作者:寒星时间:2026-10-24 11:51:54浏览:71

本文介绍如何使用 JavaScript 实现网页自动锁屏功能。通过监听鼠标移动事件记录活跃时间,利用 localStorage 持久化锁屏状态,并在超时后触发锁定逻辑。支持密码验证解锁、刷新保持锁定及退出登录清除状态,有效防止他人随意操作系统。

1.使用场景

存在一种业务需求:开发一套内部系统,当检测到用户离开桌面或长时间未进行任何操作时,系统需自动锁定所有已打开的页面。其效果类似于电脑桌面的锁屏机制,用户必须输入正确的密码验证通过,或重新登录,才能恢复对页面的操作权限。此外,即使刷新页面,锁定状态也应保持不变。效果如上图所示。同时,系统也支持用户手动触发锁屏指令。该功能的核心目的是防止未经授权的人员随意访问或操作系统中的敏感数据。接下来将探讨具体的实现方案。

5s锁屏效果如下:

1.使用场景

2.思路

  1. 首先,定义一个变量 isLock 用于标识页面当前是否处于锁定状态。由于该状态需要在多个页面间共享,且在页面刷新后仍需保持有效,因此选用 localStorage 将状态存储于本地。当 isLock 为 true 时,前端界面展示锁屏样式。
  2. 设置一个定时器 setTimeout。例如,代码中设定页面无操作 n 秒后执行锁屏逻辑,即调用 lockPro() 函数。具体实现为:var timer = setTimeout(lockPro, n)。
  3. 需要监听 window 的 mousemove 事件,以捕捉用户的鼠标移动行为。在判断屏幕是否已锁定的基础上,若屏幕已锁定,则忽略后续操作;若屏幕未锁定,则需记录每次鼠标移动时的时间戳,保存至 localStorage 中,并清除当前的定时器 timer,随后重新计时。
  4. 使用 setInterval 进行轮询监听 isLock 状态,每隔 1 秒获取一次最新状态,以确保能即时响应锁屏状态的变化。
  5. 执行锁屏操作 lockPro 时,计算当前时间与上次鼠标操作时间(即 moveTime)的差值。若差值小于 n 秒,则认为无需锁屏;若差值大于等于 n 秒,则执行锁屏逻辑,并更新锁屏状态 isLock。
  6. 当判断状态为已锁定时,清除定时器 timer,终止定时任务。
  7. 当判断状态为未锁定时,重置定时器。具体步骤为先清除原有的 timer,再重新设置一个新的 timer。
  8. 在用户退出登录时,需清除本地缓存中的 isLock 状态。
  9. 在用户通过密码解锁时,清除本地缓存中的 isLock 状态,重新设置 moveTime 为当前时间,并重置定时器。

整体逻辑较为复杂,需要仔细梳理各状态间的流转关系。

3.代码实现

以下代码为部分核心逻辑,HTML 结构部分已省略,开发者可根据实际需求自行调整。


// app.vue

data () {
  return {
    timeOut: 5000,
    timer: null,
    isLock: 'false'
  }
},
mounted () {
  this.timer = setTimeout(this.lockPro, this.timeOut)
  // 首次设置操作时间
  localStorage.setItem('moveTime', Date.now())
  // 首次判断状态
  this.modalStatus()
  // 轮询监听状态
  setInterval(this.modalStatus, 1000)
  // 监听鼠标事件
  this.events()
},
methods:{
   events() {
      window.onmousemove = () => {
        // console.log('鼠标移动了')
        if (!this.isLock) {
          localStorage.setItem('moveTime', Date.now())
          this.clearLocaPro('continue')
        }
      }
    },
    modalStatus() {
      if (localStorage.getItem('isLock') === 'true') {
        // console.log('锁屏了')
        this.isLock = true
        this.clearLocaPro()
      } else {
        // console.log('当前没锁屏')
        this.isLock = false
        this.clearLocaPro('continue')
      }
    },
    lockPro() {
      if (!this.timeOut) {
        localStorage.setItem('isLock', 'false')
        this.clearLocaPro('continue')
        return
      }
      if (Date.now() - localStorage.getItem('moveTime') < this.timeOut) {
        localStorage.setItem('isLock', 'false')
        this.clearLocaPro('continue')
      } else {
        localStorage.setItem('isLock', 'true')
        this.clearLocaPro()
      }
    },
    clearLocaPro(status) {
      if(this.timer){
         clearTimeout(this.timer)
      }
      if (status === 'continue') {
        this.timer = setTimeout(this.lockPro, this.timeOut)
      }
    },
    // 手动锁定
    handleLock(){
      this.clearLocaPro()
      localStorage.setItem('isLock', 'true')
    },
    // 密码解锁
    unlock(){
      localStorage.removeItem('isLock')
      localStorage.setItem('moveTime', Date.now())
      this.clearLocaPro('continue')
    },
    ...
    // 别忘了退出登录也要清除isLock
}

到此这篇关于js实现自动锁屏功能的文章就介绍到这了,更多相关js 自动锁屏 内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章
相关文章
更多