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

多JS计数器触发问题:如何为多个div实现递增计数功能

多元素数字递增计数器实现方案

问题分析

你当前的代码只针对counter-1单个元素做计数,要实现多个div各自递增到指定数值,需要为每个元素维护独立的计数状态,并批量处理更新逻辑。

步骤1:修改HTML,添加目标值属性

给每个计数器div加上data-target属性存储目标数值,同时确保更新内部的span(避免直接修改div的innerHTML覆盖结构):

<div class="various__item--skills-quantity" id="counter-1" data-target="100"><span></span></div>
<div class="various__item--skills-quantity" id="counter-2" data-target="150"><span></span></div>
<div class="various__item--skills-quantity" id="counter-3" data-target="80"><span></span></div>
<div class="various__item--skills-quantity" id="counter-14" data-target="200"><span></span></div>

步骤2:修正CSS类名(可选)

你当前CSS类名是.various__item--skill-quantity,但HTML里的类是.various__item--skills-quantity(多了一个s),统一后避免样式失效:

.various__item--skills-quantity {
  color: black;
  transition: all 0.5s;
  margin: 0 5%;
}

步骤3:重写JS逻辑,批量处理所有计数器

这段代码会遍历所有计数器元素,为每个元素初始化计数状态,统一更新直到所有元素达到目标值:

// 获取所有计数器元素
const counters = document.querySelectorAll('.various__item--skills-quantity');
// 存储每个计数器的状态:目标元素、当前值、目标值
const counterStates = Array.from(counters).map(el => ({
  element: el.querySelector('span'),
  current: 0,
  target: parseInt(el.dataset.target)
}));

// 启动定时器,每100ms更新一次
const interval = setInterval(() => {
  let allCompleted = true;
  // 遍历更新每个计数器
  counterStates.forEach(state => {
    if (state.current < state.target) {
      state.current++;
      state.element.textContent = state.current;
      allCompleted = false;
    }
  });
  // 所有计数器完成后停止定时器
  if (allCompleted) {
    clearInterval(interval);
  }
}, 100);

关键说明

  • 用data-target自定义属性让每个计数器可设置不同目标值,更灵活
  • 操作内部span元素,保留原div的结构完整性
  • 单定时器批量更新所有计数器,比每个元素单独开定时器性能更优
  • 通过allCompleted变量判断全局完成状态,完成后自动停止计数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:40:14