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

使用JavaScript/jQuery实现关联多计数器的循环延迟问题

解决关联计数器同步问题的方案

嘿,我来帮你搞定这个两个关联计数器同步的问题!你的需求很清晰:第一个计数器从0涨到2000,每100毫秒递增一次;每当第一个数是200的倍数时,第二个计数器加1,最终两者同时完成(前者到2000,后者到10)。大概率是你的代码里没协调好递增步长和触发时机,导致不同步,下面给你具体的解决思路和代码:

核心逻辑梳理

要实现同步,得先算清楚关键数值:

  • 第二个计数器要从0到10,意味着需要触发10次递增(对应200、400...2000这10个节点)
  • 第一个计数器总时长要和第二个一致:每次间隔100ms,10次触发对应10组递增,每组需要让第一个计数器涨200,所以我们把第一个计数器的步长设为20——这样每10次递增(10*100ms=1秒),第一个数就涨200,刚好触发第二个计数器加1,10组后第一个到2000,第二个到10,完美同步。

完整代码实现

首先准备HTML结构,用来显示两个计数器:

<div>
  <p>计数器1: <span id="counter1">0</span></p>
  <p>计数器2: <span id="counter2">0</span></p>
</div>

然后是JavaScript+jQuery的逻辑代码:

$(document).ready(function() {
  // 初始化变量
  let count1 = 0;
  let count2 = 0;
  const target1 = 2000;
  const target2 = 10;
  const step1 = 20; // 关键步长,确保每10次递增到200的倍数
  const interval = 100; // 间隔毫秒数

  // 设置定时器
  const counterInterval = setInterval(function() {
    // 更新计数器1
    count1 += step1;
    
    // 检查是否触发计数器2的递增:当count1是200的倍数,且count2还没到目标值
    if (count1 % 200 === 0 && count2 < target2) {
      count2++;
    }

    // 更新DOM显示
    $('#counter1').text(count1);
    $('#counter2').text(count2);

    // 当计数器1达到目标值,清除定时器
    if (count1 >= target1) {
      clearInterval(counterInterval);
      // 确保最终数值准确(避免步长导致的溢出)
      $('#counter1').text(target1);
      $('#counter2').text(target2);
    }
  }, interval);
});

代码说明

  • 步长step1=20是核心:保证每10次100ms的间隔,第一个计数器刚好涨200,触发第二个计数器加1
  • 加入了边界判断:当count1达到或超过2000时立即停止定时器,并且强制设置最终数值,避免因为步长导致的微小误差
  • 用count1 % 200 === 0来精准判断触发时机,确保第二个计数器只在正确的节点递增

这样运行代码后,两个计数器就会完美同步完成啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:57:11