投稿 搜索

热搜词

热门文章

当前位置: 站长天下 / 界面UI滚动 / 简单快速的js数字动画特效插件
简单快速的js数字动画特效插件
标签:

插件介绍

    slowNumber.js是一款简单快速的js的数字动画插件。slowNumber.js插件以最简单的方式快速的执行数字动画特效,你甚至还可以控制每秒钟的动画帧数。

    浏览器兼容性

    浏览器兼容性
    时间:2018-07-27
    阅读:

简单快速的js数字动画特效插件

简要教程

slowNumber.js是一款简单快速的js的数字动画插件。slowNumber.js插件以最简单的方式快速的执行数字动画特效,你甚至还可以控制每秒钟的动画帧数。

使用方法

在页面中引入slowNumber.js文件。

<script type="text/javascript" src="js/slowNumber.js"></script>

HTML结构

在页面中添加需要制作数字动画的元素,为它添加slowNumberclass类。

<h2 class="slowNumber">100,42</h2>

JavaScript

slowNumber.js的整个实现代码如下:

var easing = {
    quadratic: function (x){
      return Math.sqrt(x);
    }
};
       
function range(start, stop, step){
  var array = [];
  for(var i = start; i < stop; i += step) array.push(i);
  return array;
}
       
function interpolation(fps, easing, finalValue){
  function scaleIt(value){return finalValue * value; }
       
  var x = range(0, 1, 1/fps),
      y = x.map(easing).map(scaleIt);
       
  return y;
}
       
function animateEl(values, duration, onAnimate){
  var frameIndex = 0,
      fps = values.length,
      id = setInterval(anime, duration/fps );
       
  function anime(){
    var current = values[frameIndex],
        isLastFrame = (frameIndex === fps - 1);
       
    onAnimate(current, frameIndex, values);
       
    if(isLastFrame){
      clearInterval(id);
    }else{
      frameIndex++;
    }
  }
}
       
function round(value, decimals) {
  return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
       
function unformat(content){
  var unlocalized = content.replace('.', '').replace(',', '.'),
      value = parseFloat(unlocalized);
  return value;
}
       
function format(value){
  return value.toString().replace('.', ',');
}
       
window.addEventListener("DOMContentLoaded", function(){
    var fps = 30,
        els = [].slice.call(document.querySelectorAll('.slowNumber'));
       
    els.forEach(function(el){
        var content = (el.firstChild.textContent).trim(),
            decimalPlaces = content.split(',')[1] || '',
            value = unformat(content),
            values = interpolation(fps, easing.quadratic, value);
       
        animateEl(values, 1000, function (current, i, values){
          var isLast = (i === values.length - 1),
              value = round(current, decimalPlaces.length);
          el.firstChild.textContent = isLast? content : format(value);
        });
    });
});


下一篇:没有了