天天看点

layui多任务上传添加进度条

layui多任务上传添加进度条

话不多说直接上代码

html代码:
<div class="layui-upload">
  <button type="button" class="layui-btn layui-btn-normal" id="testList">上传文件</button> 
  <div class="layui-upload-list">
    <table class="layui-table">
      <thead>
        <tr><th>文件名</th>
        <th>大小</th>
        <th>上传进度</th>
        <th>状态</th>
        <th>操作</th>
      </tr></thead>
      <tbody id="demoList"></tbody>
    </table>
  </div>
  <button type="button" class="layui-btn" id="testListAction">开始上传</button>
</div> 
           
js代码:
          //多文件列表示例
  var demoListView = $('#demoList')
  ,uploadListIns = upload.render({
    elem: '#testList'
    ,url: '/admin/uploadlist' //改成您自己的上传接口
    ,accept: 'file'
    ,multiple: true
    ,auto: false
    ,bindAction: '#testListAction'
    , xhr: xhrOnProgress
    , progress: function (value) {//上传进度回调 value进度值
        element.progress('demoList', value + '%')//设置页面进度条
    }, xhr: function (index, e) {
        var percent = e.loaded / e.total;//计算百分比
        percent = parseFloat(percent.toFixed(2));
        element.progress('progress_' + index + '', percent * 100 + '%');
        console.log("-----" + percent);
    }
    // , data: JSON.stringify(Param)
    ,choose: function(obj){   
      var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
      //读取本地文件
      obj.preview(function(index, file, result){
        var tr = $(['<tr id="upload-'+ index +'">'
          ,'<td>'+ file.name +'</td>'
          ,'<td>'+ (file.size/1024).toFixed(1) +'kb</td>'
          , '<td><div class="layui-progress layui-progress-big" lay-filter="progress_'+index+'" lay-showPercent="true"><div class="layui-progress-bar" lay-percent="500%"></div></div></td>'
          ,'<td>等待上传</td>'
          ,'<td>'
            ,'<button class="layui-btn layui-btn-xs demo-reload layui-hide">重传</button>'
            ,'<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">删除</button>'
          ,'</td>'
        ,'</tr>'].join(''));
        
        //单个重传
        tr.find('.demo-reload').on('click', function(){
          obj.upload(index, file);
        });
        
        //删除
        tr.find('.demo-delete').on('click', function(){
          delete files[index]; //删除对应的文件
          tr.remove();
          uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
        });
        
        demoListView.append(tr);
      });
    }
    ,done: function(res, index, upload){
      if(res.code == 200){ //上传成功
      
        table.reload('test')
        var tr = demoListView.find('tr#upload-'+ index)
        ,tds = tr.children();
        tds.eq(3).html('<span style="color: #5FB878;">上传成功</span>');
        tds.eq(4).html(''); //清空操作
        return delete this.files[index]; //删除文件队列已经上传成功的文件
      }else{
        layer.msg(res.message, {
                    offset: '15px'
                    ,icon: 2
                    ,time: 1000
                });
                
        var tr = demoListView.find('tr#upload-'+ index)
        ,tds = tr.children();
        tds.eq(3).html('<span style="color: #FF5722;">上传失败</span>');
        tds.eq(4).find('.demo-reload').removeClass('layui-hide'); //显示重传
      }
    }
    ,error: function(index, upload){
      var tr = demoListView.find('tr#upload-'+ index)
      ,tds = tr.children();
      tds.eq(3).html('<span style="color: #FF5722;">上传失败</span>');
      tds.eq(4).find('.demo-reload').removeClass('layui-hide'); //显示重传
    }
  });

//创建监听函数
var xhrOnProgress=function(fun) {
        xhrOnProgress.onprogress = fun; //绑定监听
         //使用闭包实现监听绑
        return function() {
            //通过$.ajaxSettings.xhr();获得XMLHttpRequest对象
            var xhr = $.ajaxSettings.xhr();
             //判断监听函数是否为函数
              if (typeof xhrOnProgress.onprogress !== 'function')
                   return xhr;
               //如果有监听函数并且xhr对象支持绑定时就把监听函数绑定上去
                if (xhrOnProgress.onprogress && xhr.upload) {
                      xhr.upload.onprogress = xhrOnProgress.onprogress;
                }
                return xhr;
         }
     }
           
layui多任务上传添加进度条

注:记得资源换成官网最新的,否则可能出现问题。日常开发记录,欢迎来扰。

继续阅读