Vue网页屏保

Vue网页屏保

在vue项目中,如果项目长时间未操作需要弹出屏幕保护程序,以下为网页屏保效果,看板内容为连接的资源。
屏保效果

屏保组件

<template><div v-if="isActive" class="screensaver" @click="disableScreensaver"><div class="carousel"><divclass="carousel-slide"v-for="(url, index) in urls":key="index":style="{transform: `translateX(-${currentIndex * 100}%)`,transition: 'transform 0.5s ease-in-out'}"><iframe ref="iframe" :src="url" class="carousel-slide-iframe"></iframe></div></div><h1 class="message">屏保活动中!点击此处或敲击键盘任意键退出。</h1></div>
</template><script>
const kanbanUrl = window._CONFIG['kanbanURL']
export default {data() {return {isActive: false,currentIndex: 0,carouselInterval: null,carouselIntervalTime: 30000,urls: [// 这里URL可更换为自己需要的资源地址kanbanUrl+'/index.html',kanbanUrl+'/indexWip.html',kanbanUrl+'/AutelLine-chars.html',],};},methods: {activateScreensaver() {let screensaverFlag=window.localStorage.getItem("screensaverFlag")if(this.isActive||(screensaverFlag===false||screensaverFlag==='false')){// 如果是活动状态不重复触发 || 设置不启用屏保不触发return}this.isActive = true;this.carouselIntervalTime=window.localStorage.getItem("carouselIntervalTime")if(this.carouselIntervalTime==null||this.carouselIntervalTime===""){this.carouselIntervalTime = 30000}const element = document.documentElement; // 获取整个文档的元素if (element.requestFullscreen) { // 标准写法element.requestFullscreen();} else if (element.mozRequestFullScreen) { // Firefox 浏览器element.mozRequestFullScreen();} else if (element.webkitRequestFullscreen) { // Chrome 和 Safarielement.webkitRequestFullscreen();} else if (element.msRequestFullscreen) { // IE11element.msRequestFullscreen();}this.startCarousel();},disableScreensaver() {this.isActive = false;clearInterval(this.carouselInterval);window.removeEventListener('mousemove', this.handleMouseMove);if (document.exitFullscreen) { // 标准写法document.exitFullscreen();} else if (document.mozCancelFullScreen) { // Firefox 浏览器document.mozCancelFullScreen();} else if (document.webkitExitFullscreen) { // Chrome 和 Safaridocument.webkitExitFullscreen();} else if (document.msExitFullscreen) { // IE11document.msExitFullscreen();}},startCarousel() {clearInterval(this.carouselInterval);if (this.carouselIntervalTime == null || this.carouselIntervalTime === '' || this.carouselIntervalTime < 5000) {this.carouselIntervalTime = 5000}this.carouselInterval = setInterval(() => {this.currentIndex = (this.currentIndex + 1) % this.urls.length;}, this.carouselIntervalTime); // 每30秒切换},},mounted() {// this.activateScreensaver(); // 激活屏保,确保其开始运行},beforeDestroy() {clearInterval(this.carouselInterval);},
};
</script><style scoped>
.screensaver {position: fixed;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(0, 0, 0, 0.8);color: white;display: flex;flex-direction: column;justify-content: center;align-items: center;z-index: 9999;font-family: Arial, sans-serif;
}.carousel {width: 100%;height: 100%;display: flex;overflow: hidden;
}.carousel-slide {min-width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;
}.carousel-slide iframe {width: 100%;height: 100%;border: none;
}
.message {font-size: 2em;margin-top: 5px;text-align: center;color: #c0c0c0;cursor: pointer;position: relative;overflow: hidden;padding: 0 10px;border-radius: 20px;
}.message::before {content: '';position: absolute;top: 0;left: -100%;width: 100%;height: 100%;background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent); /* 可调整透明度 */animation: shine 5s infinite;pointer-events: none; /* 使点击事件穿透 */
}@keyframes shine {0% {left: -100%;}50% {left: 100%;}100% {left: 100%;}
}</style>

调用

<template><a-config-provider :locale="locale"><div id="app" @mousemove="mouseScreensaver" @keydown="mouseScreensaver"><router-view/><Screensaver ref="Screensaver" /></div></a-config-provider>
</template><script>
import zhCN from 'ant-design-vue/lib/locale-provider/zh_CN';
import enquireScreen from '@/utils/device';
import Screensaver from '@/components/Screensaver/Screensaver.vue';export default {components: {Screensaver,},data() {return {locale: zhCN,timeout: null, // 用于存储定时器idleTime: 5000*60*5, // 5分钟,单位为毫秒};},created() {// 创建页面时启动定时器this.setupIdleTimer();window.addEventListener('mouseup', this.mouseScreensaver);window.addEventListener('mousemove', this.mouseScreensaver);window.addEventListener('keydown', this.keydownScreensaver);let that = this;enquireScreen((deviceType) => {// tabletif (deviceType === 0) {that.$store.commit('TOGGLE_DEVICE', 'mobile');that.$store.dispatch('setSidebar', false);}// mobileelse if (deviceType === 1) {that.$store.commit('TOGGLE_DEVICE', 'mobile');that.$store.dispatch('setSidebar', false);} else {that.$store.commit('TOGGLE_DEVICE', 'desktop');that.$store.dispatch('setSidebar', true);}});},beforeDestroy() {// 销毁页面时清除定时器clearTimeout(this.timeout); // 清理定时器this.timeout = nulllet that=thiswindow.removeEventListener('mouseup', this.mouseScreensaver);window.removeEventListener('mousemove', this.mouseScreensaver);window.removeEventListener('keydown', this.keydownScreensaver);},methods: {/*** 设置新的延迟触发屏保*/setupIdleTimer() {let screensaverFlag = window.localStorage.getItem('screensaverFlag')if (screensaverFlag !== false || screensaverFlag !== 'false') {let screensaverTime = window.localStorage.getItem('screensaverTime')if (screensaverTime == null) {screensaverTime = this.idleTime}this.timeout = setTimeout(() => {this.activateScreensaver();}, screensaverTime);}},/*** 触发鼠标活动屏保定时重新计算*/mouseScreensaver() {clearTimeout(this.timeout); // 清除当前定时器this.timeout = nullthis.setupIdleTimer(); // 再次设置定时器},/*** 触发键盘活动屏保定时重新计算*/keydownScreensaver() {if(this.$refs.Screensaver.isActive){// 如果是显示状态this.$refs.Screensaver.disableScreensaver() // 销毁屏保}clearTimeout(this.timeout); // 清除当前定时器this.timeout = nullthis.setupIdleTimer(); // 再次设置定时器that.mouseScreensaver()},/*** 显示屏保*/activateScreensaver() {this.$refs.Screensaver.activateScreensaver();},},
};
</script><style>
#app {height: 100%;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot】使用IDEA创建SpringBoot项目

1、使用SpringBoot脚手架创建 我们使用SpringBoot的脚手架Spring Initializr创建&#xff0c;如图所示&#xff1a; 2、选择SpringBoot版本 最开始做项目时候&#xff0c;组长说创建一个 springboot 2.5.4 的项目&#xff0c;mysql使用 5.6.X &#xff0c;maven使用是3.6.X…

如何在鸿蒙API9和x86模拟器中使用MQTT

目录 引言 安装MQTT软件包 避免MQTT软件包自动升级 程序的编写 运行测试 结语 引言 虽然我的课主要是OpenHarmony南向开发的&#xff0c;但是结课时有个同学说他在写鸿蒙APP时无法将MQTT库加入到设备中&#xff0c;希望我帮忙看看。由于他没有鸿蒙的真机&#xff0c;只能…

保姆级教程用vite创建vue3项目并初始化添加PrimeVue UI踩坑实录

文章目录 一、什么是PrimeVue二、详细教程1.添加PrimeVue2.配置main.js3.添加自动引入4.配置vite.config.js5.创建测试页面 一、什么是PrimeVue PrimeVue 是一个用于 Vue.js 3.x 开发的一款高质量、广受欢迎的 Web UI 组件库。 官网地址&#xff1a;https://primevue.org/ 二、…

QT的ui界面显示不全问题(适应高分辨率屏幕)

//自动适应高分辨率 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);一、问题 电脑分辨率高&#xff0c;默认情况下&#xff0c;打开QT的ui界面&#xff0c;显示不全按钮内容 二、解决方案 如果自己的电脑分辨率较高&#xff0c;可以尝试以下方案&#xff1a;自…

超级详细,如何手动安装python第三方库?

文章目录 1&#xff0c;python第三方库安装包有3种类型2&#xff0c;python第三方库安装包whl文件如何安装&#xff1f;3&#xff0c;python第三方库安装包zip和tar.gz文件如何安装&#xff1f;4&#xff0c; python第三方库安装包exe文件如何安装&#xff1f; 手动安装第三方库…

Alibaba EasyExcel 导入导出全家桶

一、阿里巴巴EasyExcel的优势 首先说下EasyExcel相对 Apache poi的优势&#xff1a; EasyExcel也是阿里研发在poi基础上做了封装&#xff0c;改进产物。它替开发者做了注解列表解析&#xff0c;表格填充等一系列代码编写工作&#xff0c;并将此抽象成通用和可扩展的框架。相对p…

什么叫自动获得ip地址?自动获得的ip地址怎么设置

在数字化时代&#xff0c;网络连接已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;对于非技术用户而言&#xff0c;复杂的网络配置常常令人感到困惑。幸运的是&#xff0c;自动获得IP地址技术的出现&#xff0c;极大地简化了网络配置过程。本文将详细介绍自动获…

流媒体之linux下离线部署FFmpeg 和 SRS

前言 用户对网络做了限制&#xff0c;只能访问指定的网址&#xff0c;和没网没啥区别&#xff0c;导致无法连接外网&#xff0c;无法获取安装包&#xff0c;还有一些编译需要的开源工具 用户需要用平台查看库房的海康摄像头实时监控&#xff0c;只能在库房里一台纯净的ubantu…

数字时代的文化宝库:存储技术与精神生活

文章目录 1. 文学经典的数字传承2. 音乐的无限可能3. 影视艺术的数字化存储4. 结语 数字时代的文化宝库&#xff1a;存储技术与精神生活 在数字化的浪潮中&#xff0c;存储技术如同一座桥梁&#xff0c;连接着过去与未来&#xff0c;承载着人类文明的瑰宝。随着存储容量的不断增…

渗透测试之Web基础之Linux病毒编写——泷羽sec

声明&#xff1a; 学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。本文只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频 (bilibili.com)https://space.bilibili.com/350329294 导读&#xff1a; 时刻…

基于神经网络的弹弹堂类游戏弹道快速预测

目录 一、 目的... 1 1.1 输入与输出.... 1 1.2 隐网络架构设计.... 1 1.3 激活函数与损失函数.... 1 二、 训练... 2 2.1 数据加载与预处理.... 2 2.2 训练过程.... 2 2.3 训练参数与设置.... 2 三、 测试与分析... 2 3.1 性能对比.... 2 3.2 训练过程差异.... 3 四、…

Xlsxwriter生成Excel文件时TypeError异常处理

在使用 XlsxWriter 生成 Excel 文件时&#xff0c;如果遇到 TypeError&#xff0c;通常是因为尝试写入的值或格式与 XlsxWriter 的限制或要求不兼容。 1、问题背景 在使用 Xlsxwriter 库生成 Excel 文件时&#xff0c;出现 TypeError: “expected string or buffer” 异常。此…

MATLAB期末复习笔记(下)

目录 五、数据和函数的可视化 1.MATLAB的可视化对象 2.二维图形的绘制 3.图形标识 4.多子图绘图 5.直方图的绘制 &#xff08;1&#xff09;分类 &#xff08;2&#xff09;垂直累计式 &#xff08;3&#xff09;垂直分组式 &#xff08;4&#xff09;水平分组式 &…

操作系统学习

问题&#xff1a; 因为想用傲梅来给系统盘扩容&#xff0c;导致无法进入操作系统&#xff0c;报错如下&#xff1a; 无法加载应用程序或操作系统&#xff0c;原因是所需文件丢失或包含错误. 文件:Windowslsystem32lwinload.efi错误代码: 0xc000007b 你需要使用恢复工具。如果…

【环境搭建】Python、PyTorch与cuda的版本对应表

一个愿意伫立在巨人肩膀上的农民...... 在深度学习的世界里&#xff0c;选择合适的工具版本是项目成功的关键。CUDA、PyTorch和Python作为深度学习的三大支柱&#xff0c;它们的版本匹配问题不容忽视。错误的版本组合可能导致兼容性问题、性能下降甚至项目失败。因此&#xff0…

No.26 笔记 | 信息收集与工具实践指南

渗透测试的第一步&#xff1a;信息收集背后的“侦察艺术” 在网络安全的世界里&#xff0c;信息就是武器。 无论是追踪隐藏的漏洞&#xff0c;还是找到不被注意的入口&#xff0c;信息收集就像一场现代化的“谍战片”。而作为渗透测试的开场白&#xff0c;信息收集不仅考验技…

计算机网络 第5章 运输层

计算机网络 &#xff08;第8版&#xff09; 第 5 章 传输层5.4 可靠传输的原理5.4.1 停止等待协议5.4.2 连续ARQ协议 5.5 TCP报文段的首部格式5.6 TCP可靠传输的实现5.6.1 以字节为单位的滑动窗口5.6.2 超时重传时间的选择 5.7 TCP的流量控制5.7.1 利用滑动窗口实现流量控制 5.…

股指期货基差的影响因素有哪些?

在股指期货交易中&#xff0c;有一个重要的概念叫做“基差”。简单来说&#xff0c;基差就是股指期货价格与其对应的现货价格之间的差异。比如&#xff0c;我们现在有IC2401股指期货&#xff0c;它挂钩的是中证500指数。如果IC2401的价格是5244&#xff0c;而中证500指数的价格…

智能社区服务小程序+ssm(lw+演示+源码+运行)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了智能社区服务小程序的开发全过程。通过分析智能社区服务小程序管理的不足&#xff0c;创建了一个计算机管理智能社区服务小程序的方案。文章介绍了智能社区服务…

用人话讲计算机:Python篇!(十一)相对路径与绝对路径

目录 一、计算机中的路径 &#xff08;1&#xff09;什么叫路径 &#xff08;2&#xff09;绝对路径 &#xff08;3&#xff09;相对路径 二、Python中的路径 &#xff08;1&#xff09;绝对路径 &#xff08;2&#xff09;相对路径 &#xff08;3&#xff09;总结 一、…