【问题标题】:Make multiple counters count up using different data attributes使用不同的数据属性使多个计数器计数
【发布时间】:2018-05-31 16:57:55
【问题描述】:

我正在尝试使多个计数器永远计数(从您登陆站点时开始),但我希望它们根据“数据速度”属性中设置的数量以不同的增量计数。例如,一个计数为 100,200,300,另一个计数为 300,400,500。我希望能够在不添加任何 JavaScript 的情况下添加具有不同数据速度的多个不同容器。

我有这个想法:

$(document).ready(function() {
  timer = setInterval("countUP()", 1000);
});

var counter = 0;
var timer;

function countUP() {
  speed = parseInt($(".countup").attr("data-speed"));
  counter = counter + speed;
  document.getElementById("money").innerHTML = counter.toLocaleString("en");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<div class="container">
  <div class="icon"></div>
  <div id="money" class="countup" data-speed="100">0</div>
  <div class="text">Let's count up</div>
</div>

<div class="container">
  <div class="icon"></div>
  <div id="money" class="countup" data-speed="300">0</div>
  <div class="text">Let's count up differently</div>

【问题讨论】:

  • 看起来有效? jsfiddle.net/qynouLf5 你确定你已经包含了 jQuery 吗?控制台中的任何错误?此外,您不需要为 2 个 div 重复相同的 ID;只需使用类来选择它们并循环它们
  • 谢谢,但我希望两个计数器按不同的数量进行计数 - 目前只有一个计数器在计数!哦,是的,将删除重复 ID!
  • 我要让我们以不同的方式计数,每次增加 300!
  • 那么问题是您正在选择 div by ID,但 getElementById 只选择它遇到的第一个 ID。而是使用getElementsByClassName,循环遍历它返回的数组并在该循环中设置speed,以便每个div 都不同
  • 这完美!!!!谢谢!

标签: javascript jquery html attributes counter


【解决方案1】:

您使用相同的 id、相同的类来引用具有不同属性的不同元素,因此 Javascript 卡在第一个元素上。我所做的是将目标 div 设置为 counted 类,并运行一个 foreach 循环来查找子元素跨度。

$(document).ready(function() {
  timer = setInterval("countUP()", 1000);
});

var counter = 0;

function countUP() {
  var elem = $(".counted");
  elem.each(function() {
    var speed = 0;

    var span = $(this).children('span');
    var count = parseInt(span.text());
    speed = parseInt(span.attr("data-speed"));
    counter = count + speed;
    var counted = counter;
    span.text(counted);


  });

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<div class="container counted">
  <div class="icon"></div>
  <span id="money" class="countup" data-speed="100">0</span>
  <div class="text">Let's count up</div>
</div>

<div class="container counted">
  <div class="icon"></div>
  <span id="money" class="countup" data-speed="300">0</span>
  <div class="text">Let's count up differently</div>

【讨论】:

  • 太棒了!谢谢安东尼!
  • 如何添加另一个计数器?创建另一个容器会破坏它?
  • 实际上我刚刚注意到第一个计数器没有增加 100!它们都以更大的增量上升!
  • 已修复...只需将速度重置为零并在每个循环中从 div 中获取值
猜你喜欢
  • 2021-08-26
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多