求助:用jQuery实现随机递增计数器并通过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
相关产品推荐
相关产品推荐

