数字滚动效果

想要实现把数字一位一位的分开,好比把数字 168 分红一、6和8,个位数 8 从 0 增长到 9,十位数就加 1,相似这样的效果,在网上也找了不少资料,终于实现了,如今分享下:html

效果以下:函数

html 代码:spa

<ul>
    <li class="test1"></li>
    <li class='test2'></li>
    <li class='test3'></li>
</ul>

js 代码:3d

var x = 241;
var y = 24;
var z = 155;
var oX = x.toString();
var oY = y.toString();
var oZ = z.toString();
var oNum = [oX, oY, oZ];   
var oText = ['人使用……','家机构使用……','个交易模型'];

x,y,z 为 3 个自定义的数字,oX,oY,oZ 是把数字转化成字符串,下面经过 for 循环把内容插入到每一个 li 里:code

for (var i = 0; i < oNum.length; i++) {
    var text = '';
    for (var index = 0; index < oNum[i].length; index ++) {
        text += '<b>' + 0 + '</b>'
    }
    text += '<span>' + oText[i] + '</span>';
    $('ul li').eq(i).html(text);
} 

出来的效果是:htm

会根据每一个数字有多少位数,生成多少个数字滚动,而后经过定时器来实现数字滚动:blog

function setNum(obj,num){
    var n = new Array;
    var timer = new Object;
    var oString = num.toString();
    for (let i = 0; i < oString.length; i++) {
        n[i] = 0;
        timer[i] = setInterval(function(){
            n[i] = n[i] >= 9 ? 0 : n[i] + 1;
            $(obj).eq(i).html( n[i] );  
            var text = '';
            for (let k = 0; k < oString.length; k++) {                        
                text += $(obj).eq(k).html();                        
            }  
            if (text == num) {
                for(var each in timer){
                    clearInterval(timer[each]);
                }
            }                                        
        }, 30 * Math.pow(10, oString.length - 1 - i));
    }            
}
setNum('.test1 b', x)
setNum('.test2 b', y)
setNum('.test3 b', z) 

这里封装了一个 setNum 函数,须要传入显示数字的元素节点和数字两个参数字符串

for(var each in timer) 这个循环是用来清除全部定时器io

Math.pow(10, oString.length - 1 - i) 是用来取 10 的几回方(十位数是个位数的10倍,因此设置十位数定时器的延迟时间是个位数的10倍)function

相关文章
相关标签/搜索