數字滾動效果

想要實現把數字一位一位的分開,好比把數字 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

相關文章
相關標籤/搜索