【问题标题】:JavaScript animated counter with fixed number of decimal places具有固定小数位数的 JavaScript 动画计数器
【发布时间】:2017-08-13 21:25:29
【问题描述】:

我下载了一个 jQuery 动画数字计数器。它通常从0 计数到无穷大,但现在我想从0.0000 计数到无穷大。但是,我发现当它到达0.01223 时,它会延伸到0.12239999999999 并不断增加。

我希望将其固定为 0.0000。就是这样。

$('#counter-block').ready(function() {
  $('.fb').animationCounter({
    start: 0,
    step: 1,
    delay: 100
  });
  $('.bike').animationCounter({
    start: 0.0100,
    step: 0.00005,
    delay: 2200,
    txt: ' BTC'
  });
  $('.code').animationCounter({
    start: 0,
    end: 570,
    step: 4,
    delay: 1000
  });
  $('.coffee').animationCounter({
    start: 490,
    end: 1560,
    step: 20,
    delay: 900,
    txt: ' cl'
  });
});

(function($) {
  $.fn.animationCounter = function(options) {
    return this.each(function() {
      try {
        var element = $(this);
        var defaults = {
          start: 0,
          end: null,
          step: 1,
          delay: 1000,
          txt: ""
        }
        var settings = $.extend(defaults, options || {})
        var nb_start = settings.start;
        var nb_end = settings.end;
        element.text(nb_start + settings.txt);
        var counter = function() {
          // Definition of conditions of arrest
          if (nb_end != null && nb_start >= nb_end) {
            return;
          }
          // incrementation
          nb_start = nb_start + settings.step;
          // display
          element.text(nb_start + settings.txt);
        }
        // Timer
        // Launches every "settings.delay"
        setInterval(counter, settings.delay);
      } catch (e) {
        alert(e + ' at line ' + e.lineNumber);
      }
    });
  };
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="main">
  <div class="intro">
    <h1 class="title-plugin">animationCounter.js</h1>
  </div>
  <div class="block-wrapper">
    <div class="block">
      <p><span class="lnr lnr-heart"></span></p>
      <p class="counter-wrapper"><span class="fb"></span></p>
      <p class="text-block">like</p>
    </div>
    <div class="block">
      <p><span class="lnr lnr-code"></span></p>
      <p class="counter-wrapper"><span class="code"></span></p>
      <p class="text-block">code</p>
    </div>
    <div class="block">
      <p><span class="lnr lnr-bicycle"></span></p>
      <p class="counter-wrapper"><span class="bike"></span></p>
      <p class="text-block">bicycle</p>
    </div>
    <div class="block">
      <p><span class="lnr lnr-history"></span></p>
      <p class="counter-wrapper"><span class="coffee"></span></p>
      <p class="text-block">coffee</p>
    </div>
  </div>
  <footer>
    <p>Copyright (c) 2017 <a href="http://www.pixel-renaissance.com">Micheline Pavadé</a></p>
  </footer>
</div>

如果我刷新页面,数字将从0 重新开始。即使用户关闭页面,有没有办法让它继续计数?

【问题讨论】:

  • "如果我刷新页面,数字又从 0 开始。有没有办法让它在用户关闭页面的情况下继续计数?"您要保存值还是继续计数??
  • 我想在用户睡觉或注销时继续计数
  • 你需要一种带有数据库的后端语言来存储数据
  • 我认为如果我想保存值,继续计数我认为应该在客户端完成
  • “睡眠或注销”是否包括关闭浏览器?如果是这样,那么是的,您肯定需要后端执行,如果客户端未打开,则客户端代码无法运行! Javascript 是一种前端/客户端语言,它只在您访问的页面上运行。如果关闭没有更多的JS

标签: javascript jquery


【解决方案1】:

诀窍是 toFixed(),您可以使用它来确保它只使用四位小数。这是在写入页面时使用nb_start.toFixed(4) 完成的。

请注意,如果数字大于 1,您可能想要使用 toFixed(),因此我在以下示例中将其包装在 if/else 条件中:

$('#counter-block').ready(function() {
  $('.fb').animationCounter({
    start: 0,
    step: 1,
    delay: 100
  });
  $('.bike').animationCounter({
    start: 0.0100,
    step: 0.00005,
    delay: 2200,
    txt: ' BTC'
  });
  $('.code').animationCounter({
    start: 0,
    end: 570,
    step: 4,
    delay: 1000
  });
  $('.coffee').animationCounter({
    start: 490,
    end: 1560,
    step: 20,
    delay: 900,
    txt: ' cl'
  });
});

(function($) {
  $.fn.animationCounter = function(options) {
    return this.each(function() {
      try {
        var element = $(this);
        var defaults = {
          start: 0,
          end: null,
          step: 1,
          delay: 1000,
          txt: ""
        }
        var settings = $.extend(defaults, options || {})
        var nb_start = settings.start;
        var nb_end = settings.end;
        element.text(nb_start + settings.txt);
        var counter = function() {
          // Definition of conditions of arrest
          if (nb_end != null && nb_start >= nb_end) {
            return;
          }
          // incrementation
          nb_start = nb_start + settings.step;
          // display
          if (nb_start < 1) {
            element.text(nb_start.toFixed(4) + settings.txt);
          }
          else {
            element.text(nb_start + settings.txt);
          }
        }
        // Timer
        // Launches every "settings.delay"
        setInterval(counter, settings.delay);
      } catch (e) {
        alert(e + ' at line ' + e.lineNumber);
      }
    });
  };
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="main">
  <div class="intro">
    <h1 class="title-plugin">animationCounter.js</h1>
  </div>
  <div class="block-wrapper">
    <div class="block">
      <p><span class="lnr lnr-heart"></span></p>
      <p class="counter-wrapper"><span class="fb"></span></p>
      <p class="text-block">like</p>
    </div>
    <div class="block">
      <p><span class="lnr lnr-code"></span></p>
      <p class="counter-wrapper"><span class="code"></span></p>
      <p class="text-block">code</p>
    </div>
    <div class="block">
      <p><span class="lnr lnr-bicycle"></span></p>
      <p class="counter-wrapper"><span class="bike"></span></p>
      <p class="text-block">bicycle</p>
    </div>
    <div class="block">
      <p><span class="lnr lnr-history"></span></p>
      <p class="counter-wrapper"><span class="coffee"></span></p>
      <p class="text-block">coffee</p>
    </div>
  </div>
  <footer>
    <p>Copyright (c) 2017 <a href="http://www.pixel-renaissance.com">Micheline Pavadé</a></p>
  </footer>
</div>

要存储该值以便用户不必刷新页面,您正在寻找 cookies,或者最好是 localStorage。使用localStorage.setItem('variable', 'value');将变量存储在所需的位置,然后当用户再次访问页面时将变量设置为存储在localStorage中的值:var stored_value = localStorage.getItem('variable');

希望这会有所帮助! :)

【讨论】:

  • 我认为这只会保存号码,然后从用户离开的地方继续。我的意思是,当用户注销或睡眠一天时,数字是否有可能继续计数。例如,用户今天启动页面,计数从 0 到 100,用户从 100 离开页面,当他回来时,它已经到了 200。希望你明白我吗?
  • 这是可能的。请参阅我在 sn-p 下方的段落,关于 cookieslocalStorage。这两个都将持续个会话之间,这意味着如果您在第 1 天设置了一个localStorage 值,将应用程序离开当天,然后再回来,它仍然会保留该值。只需设置一个localStorage 变量来表示您的值,并确保在所需的位置也更新 localStorage但是,它必须设置在“逻辑”点,例如金额;当用户离开页面时,您无法确定,因此专门围绕用户离开页面编写逻辑代码是不安全的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多