zoukankan      html  css  js  c++  java
  • 数字滚动效果

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

    效果如下:

    html 代码:

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

    js 代码:

    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 里:

    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);
    } 

    出来的效果是:

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

    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) 这个循环是用来清除所有定时器

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

  • 相关阅读:
    【转】修改mysql数据库的用户名和密码
    oracle 11g密码过期问题解决方法
    配置网络YUM源
    RedHat 7.0更新升级openSSH7.4p1
    Linux下端口被占用解决
    js function 中的返回值
    代码笔记1
    element模态框dialog中的select组件中选中无反应无显示
    vue如何使用rules对表单字段进行校验
    关于JSON.parse(JSON.stringify(obj))实现深拷贝应该注意的坑
  • 原文地址:https://www.cnblogs.com/LY-leo/p/5819435.html
Copyright © 2011-2022 走看看