问题解答:如何每隔2分钟弹出一次弹出框

事情是这样的,昨天有个粉丝问我:如何每隔2分钟弹出一次弹出框

我说 那不就是setInterval嘛,然后设定2分钟执行一次。

他说 不是的,这个2分钟只是我说的一个时间,不是常量,是服务端下发的。

我说 那就获取了这个时间值再定时。

他说 但是如果用户把浏览器关了,如果2分钟内又打开了,得记住时间,然后距离上次如果到2分钟了,就弹出,如果超过了就直接弹,不用等了。

我说 看来还得记录一下每次的时间啊。但如果每次记住了,存到localStorage里,用户如果不刷新,还拿不到最新值。

他说 是啊,很费劲。

1 需求分析 

  1. 首次来到页面,直接弹出;
  2. 首次弹出后,记录时间点,记录距离下次的时间点;
  3. 这个时间点得存到localStorage里;
  4. 但是存到localStorage里呢,用户如果不刷新页面,下次的时间点就拿不到;
  5. 所以需要本地再存一份,可以存到一个变量里;
  6. 首次弹出后,开始倒计时,倒计时的时间值为终点值 减去 当前时间
  7. 如果用户关闭浏览器,再打开,需要获取localStorage时间,再与当前时间对比,超出则直接弹出,开始计算下一次的时间点,未超出,则继续倒计时,倒计时的值为终点值 减去 当前时间

2 代码实现 

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title></title><style></style></head><body><script>var myTime = 0;var timeExp = 1000*60*2; // 设定2分钟后继续打印// 第一次执行function first() {// 第一次就要弹框console.log('第一次弹框');// 第一次弹框把时间记录下来,记录的是下次打印的时间点var newDate = new Date().getTime() + timeExp;myTime = newDate;localStorage.setItem('t', newDate);}function timerFn() {// 对比localStorage,如果是第一次localStorage没有值,myTime为flase,first执行// 如果localStorage有值,myTime也有值了,first就不执行了myTime = localStorage.getItem('t');// 无记录,第一次开始执行if (!myTime) {first();}// 执行完成一次后,不管刷新或者不刷新,myTime都有值了var newDate1 = new Date().getTime();if (newDate1 >= myTime) {console.log('打印');// 然后开始记录下次打印时间myTime = newDate1 + timeExp;localStorage.setItem('t', newDate1 + timeExp);// 开始安装下次定时器timerFn();} else { // 如果时间没过,稍后才到时间// 看看还差多久才打印var laterTime = myTime - newDate1;setTimeout(() => {console.log('打印');// 然后开始记录下次打印时间var newDate2 = new Date().getTime();myTime = newDate2 + timeExp;localStorage.setItem('t', newDate2 + timeExp);// 开始安装下次定时器timerFn();}, laterTime)}}timerFn();</script></body>
</html>

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

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

相关文章

matlab入门基础笔记

1、绘制简单三角函数&#xff1a; 绘制正弦曲线和余弦曲线。x[0:0.5:360]*pi/180; plot(x,sin(x),x,cos(x)); &#xff08;1&#xff09;明确x轴与y轴变量&#xff1a; 要求为绘制三角函数&#xff1a; X轴&#xff1a;角度对应的弧度数组 Y轴&#xff1a;对应sin(x)的值 求…

电商平台生活用品销售数据分析与应用

摘 要 在当前互联网飞速发展的时代&#xff0c;计算机应用给我们的工作生活带来了极大的便利。如今我们的生活离不开电商平台&#xff0c;其随之而来的是各种各样的销售数据与消费者信息&#xff0c;这些数据和信息的分析应用成为了当前互联网领域研究的重要部分。 本论文以基…

python自动化办公工具:自动批量生成奖状的工具(可视化)

&#x1f446;点击关注 获取更多编程干货&#x1f446; 不知道大家有没有注意到一种趋势&#xff0c;现在即便是那些非程序员&#xff0c;甚至对计算机一窍不通的人&#xff0c;也开始学习Python了&#xff0c;其“普及程度”实在让人感到有些惊讶。 那么&#xff0c;对于那些…

如何通过防泄密U盘,实现数据传输的安全性及可控性?

随着信息技术的发展&#xff0c;U盘作为重要的数据存储和传输工具&#xff0c;其安全性越来越受到关注。在日常办公中&#xff0c;经常会遇到这类情况&#xff1a;员工为了方便&#xff0c;随意使用U盘拷贝公司的机密资料。一旦U盘丢失或者被窃取&#xff0c;公司的机密资料就有…

警惕!最新17本期刊(含2本Top)被“镇压”,无影响因子无分区,这是被踢了吗?

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.5-1.0&#xff08;录用…

【金】02Y90-60 大数据-HivetoMysQL

1、安装 Java 程序&#xff08;jdk&#xff09; 2、添加以下JAR包 3、确认配置成自己的数据库 ....

【数据结构与算法】线索二叉树 详解

为什么可在不增加指针域的情况下&#xff0c;对二叉树进行线索化&#xff1f; 不增加指针域&#xff1a;因为可以利用n1个空链域。 在线索二叉树中&#xff0c;为每个节点添加两个标志位&#xff0c;分别表示左指针和右指针是普通的孩子指针还是线索&#xff08;前驱或后继&a…

禅道身份认证绕过漏洞(QVD-2024-15263)复现

禅道项目管理系统在开源版、企业版、旗舰版的部分版本中都存在此安全漏洞。攻击者可利用该漏洞创建任意账号实现未授权登录。 1.漏洞级别 高危 2.漏洞搜索 fofa: title"禅道"3.影响范围 v16.x < 禅道 < v18.12 &#xff08;开源版&#xff09; v6.x <…

解决云原神在Linux浏览器鼠标无法旋转视角问题

【20230917】手动修复米哈游云游戏在Linux平台无法锁定鼠标问题 - 哔哩哔哩 // UserScript // name Genshin Cloud Mouse Fix // namespace https://www.bilibili.com/read/cv26576757/ // version 0.1 // description Fix a Genshin cloud game mouse move …

《STM32 HAL库》CAN通信系列函数详尽解析——HAL_CAN_Init()

食用指南&#xff1a;本文主要内容为梳理CAN初始化函数主要运行逻辑及重点功能实现代码的详尽解析。函数源码在文末&#xff0c;建议在阅读源码之后观看。 CAN相关寄存器图&#xff1a; 主要逻辑分析&#xff1a; 下面分点梳理函数的主要逻辑&#xff08;注意逻辑序号&#xf…

function包装器和bind包装器

function包装器和bind包装器 包装器function包装器为什么需要functionfunction包装器function包装器的应用场景逆波兰表达式求值 bind包装器bind包装器的应用场景 包装器 包装器是用于给其他编程接口提供更一致或更合适的接口 由于函数调用可以使用函数名、函数指针、函数对象…

Java_POJO

概念 POJO即简单的Java对象&#xff0c;区别于JavaBean JavaBean&#xff1a;特殊的Java类&#xff0c;容易被重用或插入到其他应用程序中去&#xff0c;通过封装属性和方法成为具有某种功能或者处理某个业务的对象 这个类必须有public的无参构造器所有属性都是private的所有属…

【React】极客园--04.发布文章模块

实现基础文章发布 创建基础结构 import {Card,Breadcrumb,Form,Button,Radio,Input,Upload,Space,Select } from antd import { PlusOutlined } from ant-design/icons import { Link } from react-router-dom import ./index.scssconst { Option } Selectconst Publish () …

使用Java构建微服务架构的最佳实践

使用Java构建微服务架构的最佳实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 随着云计算、容器化和微服务架构的兴起&#xff0c;越来越多的企业开始采用…

【JavaEE】Cookie和Session详解

一.Cookie 首先我们知道HTTP协议本身是’‘无状态’‘的, 这里的’‘无状态’指的是:默认情况下HTTP协议的客户端和服务器之间的这次通信,和下次通信之间没有直接的联系. 但是在实际的开发过程之中, 我们很多时候是需要知道请求之间的关联关系的. 例如登陆网站成功后,第二次访…

[modern c++][17] 任意数据类型 any

前言&#xff1a; #include <any> c17里引入了std::any类型&#xff0c;这个类型类似于union类型&#xff0c;但是比union功能多且能容纳所有类型(内置类型/自定义类型)&#xff0c;同时提供 type 方法用于获取一个 type_info 实例&#xff0c;进而用于准确判断入参的准…

IPv6知识点整理

IPv6&#xff1a;是英文“Internet Protocol Version 6”&#xff08;互联网协议第6版&#xff09;的缩写&#xff0c;是互联网工程任务组&#xff08;IETF&#xff09;设计的用于替代IPv4的下一代IP协议&#xff0c;其地址数量号称可以为全世界的每一粒沙子编上一个地址 。 国…

BigDataCloud 反向地理编码

在当今数字化飞速发展的时代&#xff0c;地理信息的精确获取和游戏数据的深入分析成为众多领域的关键需求。2024 年的今天&#xff0c;技术的创新为我们带来了更为出色的 API 服务。BigDataCloud 反向地理编码服务&#xff0c;能够将经纬度迅速而准确地转换为详细位置信息&…

ThinkPHP5大学生社会实践管理系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP5大学生社会实践管理系统 一 介绍 大学生社会实践管理系统基于ThinkPHP5框架开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈&#xff1a;ThinkPHP5mysqlbootstrapphpstudyvscode 二 功…

ChatTTS增强版V3【已开源】,长文本修复,中英混读,导入音色,批量SRT、TXT

ChatTTS增强版V3来啦&#xff01;本次更新增加支持导入SRT、导入音色等功能。结合上次大家反馈的问题&#xff0c;修复了长文本、中英混读等问题。 项目已开源(https://github.com/CCmahua/ChatTTS-Enhanced) 项目介绍 V3 ChatTTS增强版V3&#xff0c;长文本修复&#xff0c…