js 实现进度条功能。

Posted 弥蒙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 实现进度条功能。相关的知识,希望对你有一定的参考价值。

/**
 * 纯js进度条
 * Created by kiner on 15/3/22.
 */

function progress(options){

    this.w = (options && options.width)?parseFloat(options.width) : parseFloat(this.options.width);
    this.h = (options && options.height)?parseFloat(options.height) : parseFloat(this.options.height);
    this.bgColor = (options && options.bgColor)?options.bgColor : this.options.bgColor;
    this.proColor = (options && options.proColor)?options.proColor : this.options.proColor;
    this.fontColor = (options && options.fontColor)?options.fontColor : this.options.fontColor;
    this.showPresent = (options && options.showPresent != undefined)?options.showPresent : this.options.showPresent;
    this.completeCallback = (options && options.completeCallback)?options.completeCallback : this.options.completeCallback;
    this.changeCallback = (options && options.changeCallback)?options.changeCallback : this.options.changeCallback;
    this.text = (options && options.text)?options.text : this.options.text;
    this.val = (options && options.val)?options.val : this.options.val;

    this.strTemp = this.text.substring(0,this.text.indexOf(‘#*‘))+"{{pro}}"+this.text.substring(this.text.indexOf(‘*#‘)+2);

    this.init();

}
/**
 * 默认选项
 * @type {{width: number, height: number, bgColor: string, proColor: string, fontColor: string, val: number, text: string, showPresent: boolean, completeCallback: Function, changeCallback: Function}}
 */
progress.prototype.options = {

    width : 200,
    height: 30,
    bgColor : "#005538",
    proColor : "#009988",
    fontColor : "#FFFFFF",
    val : 10,
    text:"当前进度为#*val*#%",
    showPresent : true,
    completeCallback:function(){},
    changeCallback:function(){}

};

/**
 * 初始化
 */
progress.prototype.init = function(){

    this.proBox = document.createElement(‘div‘);
    this.proBg = document.createElement(‘div‘);
    this.proPre = document.createElement(‘div‘);
    this.proFont = document.createElement(‘div‘);

    addClass(this.proBox,‘proBox‘);
    addClass(this.proBg,‘proBg‘);
    addClass(this.proPre,‘proPre‘);
    addClass(this.proFont,‘proFont‘);

    this.proBox.setAttribute("style","width:"+this.w+"px; height:"+this.h+"px; position:relative; overflow:hidden; box-shadow:0 0 5px #FFFFFF; -moz-box-shadow:0 0 5px #FFFFFF; -webkit-box-shadow:0 0 5px #FFFFFF; -o-box-shadow:0 0 5px #FFFFFF;");
    this.proBg.setAttribute("style","background-color:"+this.bgColor+"; position:absolute; z-index:1; width:100%; height:100%; top:0; left:0;");
    this.proPre.setAttribute("style","transition:all 300ms; -moz-transition:all 300ms; -webkit-transition:all 300ms; -o-transition:all 300ms; width:"+this.val+"%; height:100%; background-color:"+this.proColor+"; position:absolute; z-index:2; top:0; left:0;");
    if(this.showPresent){

        this.proFont.setAttribute("style","overflow:hidden;text-overflow:ellipsis; white-space:nowrap; *white-space:nowrap; width:100%; height:100%; color:"+this.fontColor+"; text-align:center; line-height:"+this.h+"px; z-index:3; position:absolute; font-size:12px;");

        var text = this.parseText();
        this.proFont.innerhtml = text;
        this.proFont.setAttribute("title",text);
        this.proBox.appendChild(this.proFont);
    }


    this.proBox.appendChild(this.proBg);
    this.proBox.appendChild(this.proPre);

};

/**
 *
 */
progress.prototype.refresh = function(){
    this.proPre.style.width = this.val+"%";

    this.proFont.innerHTML = this.parseText();
};

/**
 * 转换文字
 * @returns {options.text|*}
 */
progress.prototype.parseText = function(){
    this.text = this.strTemp.replace("{{pro}}",this.val);
    return this.text;
};

/**
 * 更新进度条进度
 * @param val
 */
progress.prototype.update = function(val){

    this.val = val;
    this.refresh();

    this.changeCallback.call(this,val);
    if(val==100){

        this.completeCallback.call(this,val);

    }
};
/**
 * 获取进度条本身的html对象,可直接将其塞入容器中
 * @returns {HTMLElement|*}
 */
progress.prototype.getBody = function(){
    return this.proBox;
};
/**
 * 获取当前进度条的值
 * @returns {*}
 */
progress.prototype.getVal = function(){
    return this.val;
};

function hasClass(obj, cls) {
    return obj.className.match(new RegExp(‘(\\s|^)‘ + cls + ‘(\\s|$)‘));
}

function addClass(obj, cls) {
    if (!this.hasClass(obj, cls)) obj.className += " " + cls;
}

function removeClass(obj, cls) {
    if (hasClass(obj, cls)) {
        var reg = new RegExp(‘(\\s|^)‘ + cls + ‘(\\s|$)‘);
        obj.className = obj.className.replace(reg, ‘ ‘);
    }
}

function toggleClass(obj,cls){
    if(hasClass(obj,cls)){
        removeClass(obj, cls);
    }else{
        addClass(obj, cls);
    }
}

progess.js使我们能够实现进度条功能,下边是当初下载时候的例子。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>进度条插件progress.js</title>
    <script src="progress.js"></script>
    <style>
        body{
            background: url("bg.png");
        }

        .pro,.result {
            width: 200px;
            margin: 100px auto;

        }
        .result{
            text-align: center;
            text-shadow: 0 0 5px #333333;
            color:#FFFFFF;
        }
    </style>
    <script>

        window.onload = function(){

            var result = document.getElementsByClassName(‘result‘)[0];

            var pro = new progress({
                width : 200,//进度条宽度
                height: 30,//进度条高度
                bgColor : "#3E4E5E",//背景颜色
                proColor : "#009988",//前景颜色
                fontColor : "#FFFFFF",//显示字体颜色
                val : 10,//默认值
                text:"当前进度为#*val*#%",//显示文字信息
                showPresent : true,
                completeCallback:function(val){
                    console.log(‘已完成‘);
                    result.innerHTML = ‘已完成‘;
                },
                changeCallback:function(val){
                    console.log(‘当前进度为‘+val+‘%‘);
                    result.innerHTML = ‘当前进度为‘+val+‘%‘;
                }
            });

            document.getElementsByClassName(‘pro‘)[0].appendChild(pro.getBody());


            setTimeout(function(){

                pro.update(50);
                setTimeout(function(){

                    pro.update(10);
                    setTimeout(function(){

                        pro.update(100);
                        setTimeout(function(){

                            pro.update(0);
                        },3000);
                    },3000);

                },3000);
            },3000);

        };

    </script>
</head>
<body>
    <div class="pro"></div>
    <div class="result"></div>
</body>
</html>

自己写的我也贴出来吧,后来自己写的就是简单的应用了。

<script type="text/javascript">
$(function() {
    
    if("${onOff}"=="on"){
         document.getElementById("batchId").disabled=true;
        }
    //异步保存发送
    $("#addform").eblueValidate( {
            
            submitHandler : function(form) {
                $(form).ajaxSubmit({
                    resetForm : false,
                    dataType:‘json‘,
                    success : function(msg) {
                        if(msg.result==true)
                        {    
                            pro.update(100);
                            window.parent.alertExpand({message_param:msg.info});
                            setTimeout(function(){
                                document.getElementsByClassName(‘pro‘)[0].removeChild(pro.getBody());
                            },1000);
                            
                        }else{
                            window.parent.alertExpand({message_param:msg.info,iconCls_param:‘error‘,timeout_param:3000});
                            setTimeout(function(){
                                document.getElementsByClassName(‘pro‘)[0].removeChild(pro.getBody());
                            },1000);
                        }
                    }
                    });
                
            }
    });
    
});
var pro1 = document.getElementById("pro1");
var pro ="";
    function addSubmit(){
        var kddbf = document.getElementById("kddbf").value;
        var kcdbf = document.getElementById("kcdbf").value;
        var ksdbf = document.getElementById("ksdbf").value;
        var imgzip = document.getElementById("imgzip").value;
        var sfzid = document.getElementById("sfzid").value;
        var fdat = document.getElementById("fdat").value;
        if(kddbf.length>0 && kcdbf.length>0 && ksdbf.length>0 && imgzip.length>0 && sfzid.length>0 && fdat.length>0){
        pro = new progress({
            width : 200,//进度条宽度
            height: 30,//进度条高度
            bgColor : "#3E4E5E",//背景颜色
            proColor : "#009988",//前景颜色
            fontColor : "#FFFFFF",//显示字体颜色
            val : 10,//默认值
            text:"当前进度为#*val*#%",//显示文字信息
            showPresent : true,
            completeCallback:function(val){
                console.log(‘已完成‘);
              //  result.innerHTML = ‘已完成‘;
              //  result.style.display=‘none‘;
            },
            changeCallback:function(val){
                console.log(‘当前进度为‘+val+‘%‘);
              //  result.innerHTML = ‘当前进度为‘+val+‘%‘;
            }
        });
        setTimeout(function(){
            pro.update(15);
        },3000);
        document.getElementsByClassName(‘pro‘)[0].appendChild(pro.getBody());
        }
    //移除disabled可以上传batchId值
    $("#batchId").removeAttr("disabled");
    $("#addform").attr("action", "<%=contextPath%>/hfims/stuInfo/importStuData.do");
    $("#addform").submit();
    };
    </script>
            <div class="pro" id="pro1" align="middle"></div>

 


以上是关于js 实现进度条功能。的主要内容,如果未能解决你的问题,请参考以下文章

给 layui upload 带每个文件的进度条, .net 后台代码

给 layui upload 带每个文件的进度条, .net 后台代码

活动到片段方法调用带有进度条的线程

js 代码实现视频进度条点到哪个位置就播放那个位置的视频。进度条是用css样式另做的。

关于js或jquery进度条实现?

简单实用的进度条加载组件loader.js