zoukankan      html  css  js  c++  java
  • 关于数字加载的动画 jquery

    这是关于数字加载的一个动画,从0开始变化到设置的数字,依赖于jquery,效果如下所示

    当然,数字要显示的位数是可以设置的,默认是全部位数的数字,设置显示位数可以直接传递参数,例如:

    html文件为:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>数字</title>
        <link rel="stylesheet" type="text/css" href="css/main.css" />
        <script type="text/javascript" src="js/lib/sea.js"></script>
    </head>
    <body>
    <h1 class="num" data-num="83692">0</h1>
    <h2 class="num1" data-num="88692">0</h2>
        <script type="text/javascript"  src="js/entry.js"></script>
    </body>
    </html>

    entry.js为主要js,是这个动画的方法,内容为:

    function num_effect(dom,conf,fn){
        if(typeof conf === 'function'){
            fn = conf;
            conf = {};
        }
        this.conf = $.extend({
            digits: '', //显示的位数
            time: 0.05 //动画时间,单位为s
        }, conf || {});
        this.fn = fn;
        this.dom = $(dom);
        this.val = this.dom.data("num");
        this.handle();
    }
    
    num_effect.prototype.handle = function(){
        var self = this;
        var str = self.val.toString();
        var digits = parseInt(self.conf.digits);
        if(isNaN(digits)){
            digits = str.length;
        }
        var arrs = str.substr(0,digits).split("");
        var j = 0, max = 0;
        var setFun = setInterval(function(){
            if(max >= digits){
                clearInterval(setFun);
                self.fn();//返回函数
            }
            (function(j){//更改值
                var tmp = [];
                for(var i=0; i<arrs.length; i++){
                    var now = parseInt(arrs[i]);
                    if(now > j){
                        tmp[i] = j;
                    }else{
                        if(now === j){
                            max ++;
                        }
                        tmp[i] = now;
                    }
                }
                self.dom.text(tmp.join(""));
            })(j);
            j++;
        },self.conf.time*1000);
        setFun;
    }
    
    $.fn.extend({
        numEffect: function(conf,fn){
            this.each(function(i,dom){
                new num_effect(dom,conf,fn);
            });
        }
    });

    那么调用这个方法实现动画只需要调用函数numEffect即可,如下

    $(".num").numEffect();

    如果加载完成后需要再执行一些js,那么只需如下这样即可:

    $(".num,.num1").numEffect(function(){
        console.log("加载完成");
    });

    查看entry.js可知,参数digits是控制显示的位数的,从左到右开始,time是数字变化的时间,单位为s,使用方法如下

    $(".num1").numEffect({'digits': 2, 'time': 0.1});

    目前,该函数只支持了这两个参数的设置,以及执行后的函数设置,没有实现按需执行动画,以后有需要了再说吧,暂时先这么做个笔记吧。

  • 相关阅读:
    还没解决的问题
    USACO 1.41 The clocks
    USACO Broken Necklace
    hdu 3265 Posters
    USACO1.52 Prime Palindromes
    hdu 3068 && pku 3974 (最长回文串)(Manacher 算法)
    USACO Calf Flac
    USACO Milking Cows
    旧版RTSP协议网页视频无插件直播EasyNVR视频平台为什么无法播放H264编码视频?
    mysql的基本查询
  • 原文地址:https://www.cnblogs.com/cyj7/p/4956634.html
Copyright © 2011-2022 走看看