js实现自动锁屏功能

 更新时间:2021年06月02日 10:02:14   作者:小蝉儿  
有这么一个需求,开发了一套系统,当用户离开桌面或者一段时间不操作的话,需要把该系统所有打开页面锁定起来,本文就详细的介绍一下,感兴趣的可以了解一下

1.使用场景

有这么一个需求,开发了一套系统,当用户离开桌面或者一段时间不操作的话,需要把该系统所有打开页面锁定起来,就跟桌面锁屏一样,只能输入密码验证成功后,或者重新登录,才可以继续操作页面,如果刷新页面,也要保持锁定。就像下图一样。当然用户也可以手动触发锁屏。目的是防止他人随意操作系统的重要内容。那么该如何去实现呢?

5s锁屏效果如下:

2.思路

  1. 首先需要一个变量isLock表示页面是否锁定。由于多个页面需要共享这个数据,且刷新后依然能够获取到,所以我使用了localStorage储存在本地。isLock为true的时候就展示锁屏样式。
  2. 设置一个定时器 setTimeout,比如代码中设置页面无操作n秒后锁屏,那么n秒后执行锁屏操作lockPro(),即var timer = setTimeout(lockPro, n)
  3. 需要监测window的mousemove事件,监测用户鼠标移动动作,判断屏幕有没有被锁定,如果已经锁定,则不做任何操作,如果屏幕还没有锁定,需要设置一个变量moveTime记录每次鼠标移动时的时间,并保存到localStorage中,并且清除定时器timer,重新计时。
  4. setInterval轮询监听isLock,每1s获取一次,以便及时拿到锁屏状态。
  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 自动锁屏 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JS合并两个数组的方法详解

    JS合并两个数组的方法详解

    这篇文章主要详细介绍了JS合并两个数组的方法,文中有详细的代码示例,对我们学习JS有一定的帮助,感兴趣的同学可以参考一下
    2023-06-06
  • JavaScript获取指定元素位置的方法

    JavaScript获取指定元素位置的方法

    这篇文章主要介绍了JavaScript获取指定元素位置的方法,实例分析了javascript中left、scrollLeft、top、scrollTop、offsetHeight等属性的使用技巧,需要的朋友可以参考下
    2015-04-04
  • JavaScript中offsetWidth的bug及解决方法

    JavaScript中offsetWidth的bug及解决方法

    这篇文章主要为大家详细介绍了JavaScript中offsetWidth的bug及解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • javascript实时显示北京时间的方法

    javascript实时显示北京时间的方法

    这篇文章主要介绍了javascript实时显示北京时间的方法,涉及javascript操作时间显示的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • 微信小程序按钮巧妙用法

    微信小程序按钮巧妙用法

    这篇文章主要介绍了微信小程序按钮巧妙用法,按钮组件功能比 HTML 中的 button 按钮丰富,通过 open-type 属性可以调用微信提供的各种功能(客服、转发、获取用户授权、获取用户信息等),需要的朋友可以参考下
    2022-12-12
  • 有趣的bootstrap走动进度条

    有趣的bootstrap走动进度条

    这篇文章主要为大家详细介绍了如何实现有趣的bootstrap走动进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • javascript中parseInt()函数的定义和用法分析

    javascript中parseInt()函数的定义和用法分析

    这篇文章主要介绍了javascript中parseInt()函数的定义和用法,较为详细的分析了parseInt()函数的定义及具体用法,以及参数使用时的注意事项,需要的朋友可以参考下
    2014-12-12
  • webpack4升级到webpack5的实战经验总结

    webpack4升级到webpack5的实战经验总结

    有些老项目的包长时间没有更新,导致项目中有些性能问题,在项目迭代中考虑升级包,下面这篇文章主要给大家介绍了关于webpack4升级到webpack5的实战经验,需要的朋友可以参考下
    2022-08-08
  • JavaScript操作XLSX文件的示例详解

    JavaScript操作XLSX文件的示例详解

    本文将深入探讨如何使用强大的xlsx库来操作Excel文件,本文将涵盖如何在Node.js和浏览器环境中读取Excel文件,创建新的Excel文件等内容,感兴趣的小伙伴可以了解下
    2024-11-11
  • JavaScript时间操作之年月日星期级联操作

    JavaScript时间操作之年月日星期级联操作

    这篇文章主要介绍了JavaScript时间操作之级联日期选择操作,涉及到年、月、日、星期,感兴趣的小伙伴们可以参考一下
    2016-01-01

最新评论