javascript - HTML5 : Start counter

标签 javascript jquery html dom

我正在使用一个模板,其中有计数器 css 类,顾名思义,它会计数到具有增量效果的给定数字。

这是代码,

<div class="counter"><span id="emi" data-from="100" data-to="12835" data-refresh-interval="50" data-speed="5000">12835</span></div>

所以这在我加载页面时有效。它从 100 计数到 12835,具有计数器效果。但我需要更改该值 12835 并重新启动计数器。

无论如何我可以重新启动该效果吗?默认情况下,它在页面加载时无需调用任何方法即可工作。

所以我的另一个问题是页面加载如何调用该计数器? [这可能会给我一个线索,我应该去哪里寻找]

http://themes.semicolonweb.com/html/canvas/counters.php

我的代码:

// assume
var emi = 10000;

$("#emi").hide();
$("#emi").html(emi);
$("#emi").removeAttr("class");


$("#emi").parent().attr("class", "counter");
$("#emi").attr("data-from", "100");
$("#emi").attr("data-to", emi);
$("#emi").attr("data-refresh-interval", "50");
$("#emi").attr("data-speed", "5000");
$("#emi").show();

如果我删除 $("#emi").html(emi); 它不会更新 html 中的任何内容,#emi 中仍然有以前的值。所以正在努力。

最佳答案

我认为该插件无法让您自行重新启动,因此您需要侵入它。但这里有一个自制的演示,您可以根据自己的需要进行尝试和改进。无论如何,它应该有助于理解如何制作插件

function Counter(selector) {
  var self = this;

  //get all props from element
  this.elem = document.querySelector(selector);
  this.from = parseInt(this.elem.getAttribute('data-from') || 100);
  this.to = parseInt(this.elem.getAttribute('data-to') || 1000);
  this.refreshInterval = parseInt(this.elem.getAttribute('data-refresh-interval') || 50);
  this.speed = parseInt(this.elem.getAttribute('data-speed') || 5000);

  
  //start counter
  //if restart(int) is provided
  //restart counter after finishing with timeout
  this.start = function(restart) {
    //base logic, can be improved
    var diff = self.to - self.from;
    var steps = self.speed / self.refreshInterval;
    var step = diff / steps;
    var i = 1;
    var interval = setInterval(function() {
      var change = step * i;
      if (change <= self.to) {
        self.elem.textContent = Math.round(change);
        i++;
      } else {
        self.elem.textContent = Math.round(self.to)
        clearInterval(interval);
        //try to restart counter
        if(restart && restart > 0){
          setTimeout(function(){
            self.start(restart);
          }, restart);
        }
      }
    }, self.refreshInterval);
  }
}

//example1
var counter = new Counter('#emi');
//restart after 2000ms
counter.start(2000);

//example2
var counter2 = new Counter('#emi2');
//dont restart
counter2.start(0);
<span id="emi" data-from="100" data-to="12835" data-refresh-interval="50" data-speed="1000"></span>

<span id="emi2" data-from="100" data-to="1000" data-refresh-interval="100" data-speed="1000"></span>

关于javascript - HTML5 : Start counter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36052029/

相关文章:

html - 使用 css(Slick Carousel 库)在同一底部对齐图像 slider

javascript - 当在文本框中输入 url 时执行 javascript 事件

javascript - 将日期/时间字符串转换为日期对象

jQuery 日期选择器不适用于 ng-grid 单元格

javascript - 自动关闭不适用于日期选择器

javascript - 在 HTML/JS/JQuery 中屏蔽单词

循环内的 JavaScript 闭包 – 简单的实际示例

javascript - AJAX 在加载时按设定的时间间隔运行

jquery - 如果所有子节点都分配了类,则选择父节点

php - 将html表格数据导出到excel文件