You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用jQuery实现随机递增计数器并通过Cookie保存进度

解决前端计数器问题:累加逻辑+Cookie持久化

嘿,我来帮你搞定这个计数器的需求!咱们先梳理下你遇到的核心问题,再一步步给出解决方案:

你现有代码的问题分析

  • 第一段代码:随机数生成逻辑错误,Math.floor(Math.random() * (1 - 0 + 1)) + 1 只会生成1,因为范围被限定在了1到1的闭区间,根本没机会生成0或2。而且没有更新number变量,也没正确判断停止条件(应该是达到97就停,不是超过)。
  • 第二段代码:没有做累加操作,只是直接把随机数(0/1/2)显示出来,完全没和当前数值关联;随机数范围的写法也不够直观,逻辑上没实现“累加”的核心需求。
  • 缺少Cookie持久化逻辑,导致刷新页面后之前的进度直接丢失。

完整解决方案代码

HTML部分

<p id="offer">87</p>

jQuery实现(含Cookie功能)

$(document).ready(function() {
    // 封装Cookie读取工具函数
    function getCookie(name) {
        let value = "; " + document.cookie;
        let parts = value.split("; " + name + "=");
        if (parts.length === 2) return parts.pop().split(";").shift();
    }

    // 封装Cookie设置工具函数
    function setCookie(name, value, days) {
        let expires = "";
        if (days) {
            let date = new Date();
            date.setTime(date.getTime() + (days*24*60*60*1000));
            expires = "; expires=" + date.toUTCString();
        }
        document.cookie = name + "=" + (value || "")  + expires + "; path=/";
    }

    // 初始化数值:优先取Cookie保存的进度,没有则用初始值87,同时确保不超过97
    let number = parseInt(getCookie('counterValue')) || 87;
    number = Math.min(number, 97);
    $('#offer').text(number);

    // 如果已经到97,直接停止流程,不用启动定时器
    if (number >= 97) {
        return;
    }

    // 设置定时器(这里默认1秒执行一次,你可以改成需要的X秒对应的毫秒数)
    let interval = setInterval(function() {
        // 生成0、1、2之间的随机整数
        let increment = Math.floor(Math.random() * 3);
        // 累加数值,最多到97
        number = Math.min(number + increment, 97);
        
        // 更新页面显示
        $('#offer').text(number);
        // 同步保存到Cookie(这里保存1年,可自己调整有效期)
        setCookie('counterValue', number, 365);
        
        // 达到97时立即停止定时器
        if (number >= 97) {
            clearInterval(interval);
        }
    }, 1000); // 1000=1秒,改成你需要的X*1000即可
});

关键逻辑说明

  • 随机数生成:Math.floor(Math.random() * 3) 会生成0、1、2三个整数,完美匹配你“随机递增0、1或2”的需求。
  • 累加与停止:每次累加后用Math.min()确保数值不会超过97,达到目标值时立即清除定时器,避免无效执行。
  • Cookie持久化:页面加载时优先读取Cookie中的进度,每次更新计数器时同步保存;如果数值已经是97,刷新后直接显示目标值,不会再启动定时器。
  • 灵活调整间隔:把定时器最后一个参数1000改成你需要的X秒对应的毫秒数即可(比如2秒就是2000)。

内容的提问来源于stack exchange,提问作者Gomle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:51:24