J*aScript倒计时持久化:避免页面刷新重置


JavaScript倒计时持久化:避免页面刷新重置

本文详细介绍了如何利用浏览器localStorage机制,实现一个在页面刷新后仍能保持其状态的J*aScript倒计时功能。通过在每次倒计时数值更新时将当前值存储到localStorage中,并在页面加载时从localStorage恢复,确保倒计时进程不被中断。文章还提供了完整的代码示例,并包含了一个重置倒计时的功能,以提升用户体验和功能完整性。

客户端状态持久化的挑战

在web开发中,许多交互式组件,如倒计时、购物车数量等,其状态通常存储在j*ascript变量中。然而,当用户刷新页面时,这些j*ascript变量会被重新初始化,导致组件状态丢失。对于一个正在进行的倒计时而言,这意味着每次页面刷新都会从头开始,这显然不是我们期望的行为。为了解决这个问题,我们需要一种机制来在客户端存储和检索数据,即使页面被刷新也能保持数据不变。

利用 localStorage 实现倒计时持久化

浏览器提供了多种客户端存储方案,其中 localStorage 是一个非常适合此场景的选择。localStorage 允许Web应用程序在用户的浏览器中存储键值对数据,这些数据在浏览器会话结束后仍然存在,直到被显式清除。

实现页面刷新不重置倒计时的核心思想是:

  1. 初始化时读取: 页面加载时,首先检查 localStorage 中是否存在之前保存的倒计时值。如果存在,则使用该值作为倒计时的起始值;如果不存在,则使用默认的初始值。
  2. 更新时存储: 在倒计时过程中,每当倒计时的数值发生变化时,都将最新的数值保存到 localStorage 中。
  3. 重置功能: 提供一个机制,允许用户手动重置倒计时,这通常意味着从 localStorage 中移除保存的值并刷新页面。

代码实现

下面是一个完整的示例代码,展示了如何结合 HTML 和 J*aScript 来实现一个持久化的随机减量倒计时。

HTML 结构

我们只需要一个 元素来显示倒计时数量,以及一个 button 元素来提供重置功能。

<span class="qty" id="qty"></span>
<button id="reset">重置倒计时</button>

J*aScript 逻辑

J*aScript 部分是实现持久化倒计时的关键。我们将定义一个 setQty 函数来处理倒计时的更新和存储,并在页面加载时初始化倒计时。

<script>
    /**
     * 更新倒计时数量并将其保存到 localStorage
     * @param {number} qty 当前的倒计时数量
     */
    const setQty = (qty) => {
        // 更新页面上显示的数量
        qtySpan.innerHTML = qty;

        // 如果数量为0,则停止倒计时
        if (qty === 0) {
            // 倒计时结束时可以选择移除 localStorage 中的值,或保持0
            // localStorage.removeItem('s*ed_countdown');
            return;
        }

        // 随机生成本次减少的数量 (1到3之间)
        let parts = Math.floor((Math.random() * 3) + 1);
        // 确保减少的数量不会超过当前剩余数量
        if (parts > qty) {
            parts = qty;
        }

        // 随机生成下一次更新的延迟时间 (15到30秒之间,转换为毫秒)
        const msec =  Math.floor(((Math.random() * 15) + 15) * 1000);
        // 更新倒计时数量
        qty -= parts;

        // 关键步骤:将更新后的数量保存到 localStorage
        localStorage.setItem('s*ed_countdown', qty);

        // 使用 setTimeout 在指定延迟后递归调用 setQty
        setTimeout(() => setQty(qty), msec);
    };

    // 从 localStorage 获取保存的倒计时值,如果不存在则使用默认值 57
    // ?? 操作符在左侧为 null 或 undefined 时返回右侧的值
    const defaultQty = localStorage.getItem('s*ed_countdown') ?? 57;

    // 获取页面元素
    const qtySpan = document.getElementById('qty');
    const resetBtn = document.getElementById('reset');

    // 为重置按钮添加点击事件监听器
    resetBtn.addEventListener('click', () => {
        // 从 localStorage 移除保存的倒计时值
        localStorage.removeItem('s*ed_countdown');
        // 刷新页面,使倒计时从默认值重新开始
        location.reload();
    });

    // 页面加载时,使用获取到的(或默认的)值初始化倒计时
    setQty(parseInt(defaultQty, 10)); // 确保传入的是数字类型
</script>

代码解析与注意事项

  1. localStorage.getItem('s*ed_countdown') ?? 57;:

    YouMind YouMind

    AI内容创作和信息整理平台

    YouMind 207 查看详情 YouMind
    • localStorage.getItem('s*ed_countdown') 用于从 localStorage 中检索名为 's*ed_countdown' 的值。如果该键不存在,它将返回 null。
    • ?? (空值合并运算符) 是一个ES2025特性,它会在左侧操作数为 null 或 undefined 时返回右侧操作数。这意味着如果 localStorage 中没有保存的值,defaultQty 将被赋值为 57。
    • 重要提示: localStorage 存储的所有值都是字符串。虽然在 innerHTML 中直接使用字符串通常没有问题,但在进行数值计算前,最好使用 parseInt() 或 Number() 将其转换为数字类型,例如 setQty(parseInt(defaultQty, 10));。
  2. localStorage.setItem('s*ed_countdown', qty);:

    • 这是实现持久化的核心。在 setQty 函数内部,每次 qty 值更新后,我们都会立即将其保存到 localStorage 中。这样,即使在 setTimeout 触发下一次更新之前用户刷新了页面,最新的 qty 值也已经被保存。
  3. 重置功能:

    • resetBtn.addEventListener('click', ...) 监听重置按钮的点击事件。
    • localStorage.removeItem('s*ed_countdown'); 从 localStorage 中删除保存的倒计时值。
    • location.reload(); 刷新页面。由于 localStorage 中的值已被移除,页面重新加载时,倒计时将从 defaultQty(即 57)重新开始。
  4. 随机性:

    • Math.floor((Math.random() * 3) + 1) 生成一个 1 到 3 之间的随机整数,作为每次减少的数量。
    • Math.floor(((Math.random() * 15) + 15) * 1000) 生成一个 15 到 30 秒之间的随机延迟时间。这种随机性使得倒计时看起来更自然,模拟了库存或事件的随机波动。
  5. 浏览器兼容性:

    • localStorage 在现代浏览器中普遍支持。
    • 空值合并运算符 ?? 是ES2025特性,如果需要支持旧版浏览器,可以使用 defaultQty = localStorage.getItem('s*ed_countdown') !== null ? localStorage.getItem('s*ed_countdown') : 57; 这样的传统写法。

总结

通过巧妙地结合 localStorage 和递归的 setTimeout 函数,我们成功地创建了一个在页面刷新后依然能保持其状态的 J*aScript 倒计时。这种模式不仅适用于倒计时,也可以推广到任何需要在客户端持久化状态的场景,例如用户设置、购物车内容等。理解 localStorage 的工作原理及其在状态管理中的应用,是构建健壮和用户友好型Web应用的关键技能之一。

以上就是J*aScript倒计时持久化:避免页面刷新重置的详细内容,更多请关注其它相关文章!


# 运算符  # seo优化有什么特征  # 网络营销不包括网站推广  # 谷歌网站建设公司  # 佛山新网站建设推荐  # 全网网站建设步骤包括  # 濮阳wap手机网站建设  # 鼓楼区推广网站哪家好用  # 莆田seo排名收费  # 怎样做静态网站推广  # 网站图片优化排名  # 键值  # 有什么  # 是一个  # javascript  # 客户端  # 不存在  # 移除  # 加载  # 递归  # 倒计时  # 键值对  # 点击事件  # web应用程序  # 浏览器  # html  # java 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置  使用逻辑应用(Logic Apps)自动处理邮件附件中的XML到Excel  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  《幻兽帕鲁》手游帕鲁捕捉技巧分享  b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法  批改网官网首页登录 批改网学生用户登录入口  c++如何使用std::thread::join和detach_c++线程生命周期管理  海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接  中通快递官网指定查询 中通快递单号查询平台入口  我的世界游戏平台入口 我的世界官方官网直达链接  QQ邮箱注册地址 免费获取QQ邮箱账号  Excel宏怎么删除_Excel中删除宏的详细操作流程  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  发布小红书怎么屏蔽粉丝?屏蔽粉丝能看到吗?  Excel如何制作月度销售统计图_Excel动态图表制作与控件应用  PHP实现等比数列:构建数组元素基于前一个值递增的方法  《大润发优鲜》充值方法介绍  如何在Golang中处理表单文件上传_Golang 表单文件上传示例  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  J*aScript文本高亮功能优化:解决多词匹配错误与精确分割策略  ao3入口镜像地址 ao3镜像入口可靠跳转  J*aScript 数值去小数位处理:多种方法与实践  qq邮箱格式填写示例 qq邮箱标准填写规范  Golang如何使用gRPC拦截器实现日志收集_Golang gRPC拦截器日志收集实践  《植物大战僵尸3》火龙草作用介绍  申通快递查询 申通物流快递单实时查询入口  解决VS Code中Python版本冲突与输出异常的指南  苹果自助维修计划支持哪些设备机型  鲁班大师乓乓皮肤获取方法  《海豚家》注销账号方法  汽水音乐官网网页版入口 汽水音乐官网网页版在线入口  解决SQLAlchemy模型跨文件关联的Linter兼容性指南  怎样设置开机后自动运行某个程序_Windows启动文件夹与任务计划【自动化】  J*aScript实现网页表单实时输入字段比较与验证教程  FullCalendar自定义按钮样式定制指南  React应用中Commerce.js数据加载与状态管理最佳实践  《洛克王国:世界》国家队搭配攻略  iPhone 13 mini如何清理Safari缓存_iPhone 13 mini浏览器缓存清理方法  广州地铁app准妈咪徽章领取方法  微信客户端怎么查看二维码_微信客户端个人二维码查看方法  J*aScript模块加载器_RequireJS原理分析  Flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理  猫眼app抢票快还是小程序快  Go语言中方法接收器的选择:值类型还是指针类型?  在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示  excel怎么计算平均值 excel平均函数*ERAGE使用教学  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问  《地下城堡4:骑士与破碎编年史》墓穴挑战125攻略  《下一站江湖2》武器获取方法  我的世界官方网址入口 我的世界游戏主页直达入口 

 2025-10-02

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.