高效的jquery数字滚动特效


Posted in Javascript onDecember 17, 2015

本文实例讲述了基于jquery数字滚动特效的代码,分为四种情况分享给大家供大家参考,具体如下:

  • 有分隔符,有小数点:<div class="numberRun"></div> <br><br>
  • 只有分隔符:<div class="numberRun2"></div> <br><br>
  • 只有小数点:<div class="numberRun3"></div> <br><br>
  • 无分隔符,无小数点:<div class="numberRun4"></div>

运行效果图:

高效的jquery数字滚动特效

具体代码如下

<html>
<head>
<title>数字滚动插件</title>
<meta charset="gb2312">
<script src="http://cdn.bootcss.com/jquery/1.8.3/jquery.min.js"></script>
<style>
/*数字滚动插件的CSS可调整样式*/
.mt-number-animate{ font-family: '微软雅黑'; line-height:40px; height: 40px;/*设置数字显示高度*/; font-size: 36px;/*设置数字大小*/ overflow: hidden; display: inline-block; position: relative; }
.mt-number-animate .mt-number-animate-dot{ width: 15px;/*设置分割符宽度*/ line-height: 40px; float: left; text-align: center;}
.mt-number-animate .mt-number-animate-dom{ width: 20px;/*设置单个数字宽度*/ text-align: center; float: left; position: relative; top: 0;}
.mt-number-animate .mt-number-animate-dom .mt-number-animate-span{ width: 100%; float: left;}
</style>
</head>
<body>
<br><br>
有分隔符,有小数点:<div class="numberRun"></div> <br><br>
只有分隔符:<div class="numberRun2"></div> <br><br>
只有小数点:<div class="numberRun3"></div> <br><br>
无分隔符,无小数点:<div class="numberRun4"></div>
 
</body>
<script>
/**
*  by Mantou qq:676015863
*  数字滚动插件 v1.0
*/
;(function($) {
  $.fn.numberAnimate = function(setting) {
    var defaults = {
      speed : 1000,//动画速度
      num : "", //初始化值
      iniAnimate : true, //是否要初始化动画效果
      symbol : '',//默认的分割符号,千,万,千万
      dot : 0 //保留几位小数点
    }
    //如果setting为空,就取default的值
    var setting = $.extend(defaults, setting);
 
    //如果对象有多个,提示出错
    if($(this).length > 1){
      alert("just only one obj!");
      return;
    }
 
    //如果未设置初始化值。提示出错
    if(setting.num == ""){
      alert("must set a num!");
      return;
    }
    var nHtml = '<div class="mt-number-animate-dom" data-num="{{num}}">\
            <span class="mt-number-animate-span">0</span>\
            <span class="mt-number-animate-span">1</span>\
            <span class="mt-number-animate-span">2</span>\
            <span class="mt-number-animate-span">3</span>\
            <span class="mt-number-animate-span">4</span>\
            <span class="mt-number-animate-span">5</span>\
            <span class="mt-number-animate-span">6</span>\
            <span class="mt-number-animate-span">7</span>\
            <span class="mt-number-animate-span">8</span>\
            <span class="mt-number-animate-span">9</span>\
            <span class="mt-number-animate-span">.</span>\
          </div>';
 
    //数字处理
    var numToArr = function(num){
      num = parseFloat(num).toFixed(setting.dot);
      if(typeof(num) == 'number'){
        var arrStr = num.toString().split("");  
      }else{
        var arrStr = num.split("");
      }
      //console.log(arrStr);
      return arrStr;
    }
 
    //设置DOM symbol:分割符号
    var setNumDom = function(arrStr){
      var shtml = '<div class="mt-number-animate">';
      for(var i=0,len=arrStr.length; i<len; i++){
        if(i != 0 && (len-i)%3 == 0 && setting.symbol != "" && arrStr[i]!="."){
          shtml += '<div class="mt-number-animate-dot">'+setting.symbol+'</div>'+nHtml.replace("{{num}}",arrStr[i]);
        }else{
          shtml += nHtml.replace("{{num}}",arrStr[i]);
        }
      }
      shtml += '</div>';
      return shtml;
    }
 
    //执行动画
    var runAnimate = function($parent){
      $parent.find(".mt-number-animate-dom").each(function() {
        var num = $(this).attr("data-num");
        num = (num=="."?10:num);
        var spanHei = $(this).height()/11; //11为元素个数
        var thisTop = -num*spanHei+"px";
        if(thisTop != $(this).css("top")){
          if(setting.iniAnimate){
            //HTML5不支持
            if(!window.applicationCache){
              $(this).animate({
                top : thisTop
              }, setting.speed);
            }else{
              $(this).css({
                'transform':'translateY('+thisTop+')',
                '-ms-transform':'translateY('+thisTop+')',   /* IE 9 */
                '-moz-transform':'translateY('+thisTop+')',  /* Firefox */
                '-webkit-transform':'translateY('+thisTop+')', /* Safari 和 Chrome */
                '-o-transform':'translateY('+thisTop+')',
                '-ms-transition':setting.speed/1000+'s',
                '-moz-transition':setting.speed/1000+'s',
                '-webkit-transition':setting.speed/1000+'s',
                '-o-transition':setting.speed/1000+'s',
                'transition':setting.speed/1000+'s'
              }); 
            }
          }else{
            setting.iniAnimate = true;
            $(this).css({
              top : thisTop
            });
          }
        }
      });
    }
 
    //初始化
    var init = function($parent){
      //初始化
      $parent.html(setNumDom(numToArr(setting.num)));
      runAnimate($parent);
    };
 
    //重置参数
    this.resetData = function(num){
      var newArr = numToArr(num);
      var $dom = $(this).find(".mt-number-animate-dom");
      if($dom.length < newArr.length){
        $(this).html(setNumDom(numToArr(num)));
      }else{
        $dom.each(function(index, el) {
          $(this).attr("data-num",newArr[index]);
        });
      }
      runAnimate($(this));
    }
    //init
    init($(this));
    return this;
  }
})(jQuery);
 
$(function(){
 
  //初始化
  var numRun = $(".numberRun").numberAnimate({num:'15343242.10', dot:2, speed:2000, symbol:","});
  var nums = 15343242.10;
  setInterval(function(){
    nums+= 3433.24;
    numRun.resetData(nums);
  },3000);
 
 
  var numRun2 = $(".numberRun2").numberAnimate({num:'15343242', speed:2000, symbol:","});
  var nums2 = 15343242;
  setInterval(function(){
    nums2+= 1433;
    numRun2.resetData(nums2);
  },2000);
 
 
  var numRun3 = $(".numberRun3").numberAnimate({num:'52353434.343', dot:3, speed:2000});
  var nums3 = 52353434.343;
  setInterval(function(){
    nums3+= 454.521;
    numRun3.resetData(nums3);
  },4000);
 
  var numRun4 = $(".numberRun4").numberAnimate({num:'52353434', speed:2000});
  var nums4 = 52353434;
  setInterval(function(){
    nums4+= 123454;
    numRun4.resetData(nums4);
  },3500);
 
});
</script>
</html>

代码复制即可运行。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript 面向对象的之私有成员和公开成员
May 04 Javascript
javascript获取当前日期时间及其它操作函数
Jan 11 Javascript
善用事件代理,警惕闭包的性能陷阱。
Jan 20 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
Aug 04 Javascript
Node.js+Express配置入门教程
May 19 Javascript
在JavaScript中模拟类(class)及类的继承关系
May 20 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
Mar 04 Javascript
解析jquery easyui tree异步加载子节点问题
Mar 08 Javascript
bootstrap轮播图示例代码分享
May 17 Javascript
详解angularjs4部署文件过大解决过程
Dec 05 Javascript
基于Vue插入视频的2种方法小结
Apr 02 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
Sep 02 Javascript
JS函数的几种定义方式分析
Dec 17 #Javascript
js实现文字闪烁特效的方法
Dec 17 #Javascript
基于jquery实现省市联动特效
Dec 17 #Javascript
js实现网页收藏功能
Dec 17 #Javascript
详解javascript中原始数据类型Null和Undefined
Dec 17 #Javascript
JS实现合并两个数组并去除重复项只留一个的方法
Dec 17 #Javascript
JS数组合并push与concat区别分析
Dec 17 #Javascript
You might like
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
php Rename 更改文件、文件夹名称
2011/05/24 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
破解Session cookie的方法
2006/07/28 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
JS中对Cookie的操作详解
2016/08/05 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
Python错误处理操作示例
2018/07/18 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
详解Anaconda 的安装教程
2020/09/23 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
写好自荐信的技巧
2013/11/08 职场文书
成功的酒店创业计划书
2013/12/27 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
机械专业毕业生自我鉴定2014
2014/10/04 职场文书