1.使用场景

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

5s锁屏效果如下:

2.思路

首先需要一个变量isLock表示页面是否锁定。由于多个页面需要共享这个数据,且刷新后依然能够获取到,所以我使用了localStorage储存在本地。isLock为true的时候就展示锁屏样式。

设置一个定时器 setTimeout,比如代码中设置页面无操作n秒后锁屏,那么n秒后执行锁屏操作lockPro(),即var timer = setTimeout(lockPro, n)

需要监测window的mousemove事件,监测用户鼠标移动动作,判断屏幕有没有被锁定,如果已经锁定,则不做任何操作,如果屏幕还没有锁定,需要设置一个变量moveTime记录每次鼠标移动时的时间,并保存到localStorage中,并且清除定时器timer,重新计时。

setInterval轮询监听isLock,每1s获取一次,以便及时拿到锁屏状态。

锁屏操作lockPro,判断当前时间与上次鼠标操作的时间即moveTime的差值,如果小于n秒,则认为不需要锁屏,如果大于等于n秒,则需要锁屏,并更新锁屏状态isLock

判断状态为锁定后,清除定时器timer,结束定时任务。

判断状态为未锁定后,重置定时器,即先清除timer,再设置一个timer

退出登录时,清除本地缓存isLock。

密码解锁时,清除本地缓存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 自动锁屏 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

html5判断屏幕锁屏,js实现自动锁屏功能相关推荐

  1. Windows定时截屏、后台自动截屏工具,带有密码保护功能 —— 定时执行专家

    目录 一.软件简介 二.使用教程 1.软件下载 2.软件的安装方法 3.无察觉自动截屏(例如:间隔每 10分钟,执行 1次) 一.软件简介 <定时执行专家>是一款制作精良.功能强大.简单易 ...

  2. 自动生成表格html,js实现自动生成表格功能的代码实例

    js实现自动生成表格功能的代码实例 发布时间:2020-07-18 17:45:52 来源:亿速云 阅读:115 作者:小猪 这篇文章主要讲解了js实现自动生成表格功能的代码实例,内容清晰明了,对此有 ...

  3. dplayer js控制 自动全屏_Qt编写安防视频监控系统18-云台控制

    一.前言 云台控制是视频监控系统中必备的一个功能,对球机进行上下左右的移动,还有焦距的控制,其实核心就是控制XYZ三个坐标轴,为了开发这个模块,特意研究了各种云台控制的方法和开源库比如soap,有些厂 ...

  4. auto js实现自动截屏

    // 请求允许自动录屏 // 三步走 // 1.开启线程(因为线程是异步的), 自动点击 立即开始 // 2.请求截图权限(弹框出现) // 3.进行截图// 1.开启线程,找到点击立即开始,并且触发 ...

  5. 安卓自动滑屏脚本_自动滑屏软件下载-自动滑屏 安卓版v3.1.0-PC6安卓网

    自动滑屏脚本是一款特别神奇的安卓手机美化型实用工具.自动滑屏软件拥能支持自定义编辑代码脚本,通过自动滑屏app可以让大家的手机体验度得到很大程度改进,使用起来更顺手! 软件介绍 自动滑屏脚本是一款不需 ...

  6. 后台隐身自动屏幕截图、后台自动屏幕截图、后台自动截屏、隐身自动截屏、后台监控软件(带有密码保护)—— 定时执行专家

    目录 1.后台自动截屏的需求 2.后台自动保存屏幕截图的软件 2.1 后台自动截屏设定方法 2.2 让<定时执行专家>开机自动启动.自动隐身 2.3 不能截全屏的问题 3.软件的下载及安装 ...

  7. w10系统老是自动息屏_WIN10总是自动息屏

    有网友刚用上装了Win10系统的电脑后,发现Win10系统启动后每过几分钟就自动黑屏.从他所表示的这个状况来看,他这个Win10自动黑屏问题很有可能是设置不当导致的. 解决方法: 一:如果是Win10 ...

  8. android车机总是自动熄屏,APP总自动熄屏?100K的小工具完美保持亮屏

    [PConline 应用]不知道大家有没有碰到这样一种情况,要准备开卷考试,用手机浏览器找资料,开启网页然后抄书做笔记,但手机总是自动熄屏,非常不方便.但是,又不能把在把系统的自动熄屏都关掉,毕竟平时 ...

  9. dplayer js控制 自动全屏_vue 中使用video.js 实现m3u8视频播放格式

    官方文档:https://docs.videojs.com/tutorial-vue.html H5 的 video 标签不支持m3u8视频播放,所以借助于 video.js 1.video 定义与用 ...

  10. dplayer js控制 自动全屏_vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】...

    最近公司的产品上线,一些高级功能在基础版本中不对用户开发,通过视频的形式展示. 产品开发用的是 vue, 经同事介绍使用了vue-video-player视频播放插件,通过 demo案例很快实现了视频 ...

最新文章

  1. 扎心!程序员旅行却只能紧紧抱着电脑加班?
  2. Jquery : 上下滚动--单行 批量多行 文字图片翻屏【转】
  3. 不用车载传感器,也能L4级自动驾驶?清华百度联手发布全球首个纯路侧感知自动驾驶方案...
  4. numpy学习2:数组创建方式
  5. 普通计算机怎么算根号_混凝土花盆叠加做花园围墙,比普通红砖块好看多了,怎么算都赚到...
  6. Rails + React +antd + Redux环境搭建
  7. leetcode Add Digits
  8. Matplotlib 三维图像 入门
  9. T-SQL之条件链接
  10. 解决无法从Git官网下载Git安装包的具体方法
  11. 2021美团Java面试真题解析(含参考答案)
  12. 魔法才能打败魔法?银行现身说法
  13. 从消费互联网谈到产业互联网
  14. Win8 纯净版安装详细教程
  15. 《Hands-On Machine Learning with Scikit-Learn TensorFlow》读书笔记(三):分类
  16. 数据驱动业务,说的好听,做好很难!得这样才行
  17. Python爬虫系列之爬取微信公众号新闻数据
  18. 一篇文章搞懂设计模式
  19. MySQL数据库基础知识,基础操作详细整理
  20. java开发机房动力环境监控系统 --心得体验!

热门文章

  1. Python3爬取搜狗微信公众号
  2. Word文档字间距怎么调?
  3. 加拿大 生物工程计算机最好的学校,加拿大哪些大学有生物工程本科专业?这五大院校是理科与工科的完美结合!...
  4. 【LaTeX入门】15、在文章中添加脚注
  5. ubuntu 安装idea,创建快捷方式
  6. 原生开发跟混合开发?两者有什么区别?
  7. word 单页、多页面旋转
  8. 获取、导出微信所有表情
  9. 体验与对比新版EBS gp3 vs gp2
  10. java建行验签不成功_php无COM版建行支付返回验签记录