layui 魔改:上傳時的真實進度條

來源:互聯網
上載者:User

標籤:abort   成功   obj   span   xmlhttp   auto   ogre   action   判斷   

這個問題本身不複雜,痛點在於需要改 layui 的源碼。

HTML略。

網頁的JS域:

layui.use([‘upload‘,‘element‘,‘layer‘], function(){    var upload = layui.upload,element = layui.element,layer = layui.layer;    upload.render({    elem: ‘#test8‘    ,url: ‘upload‘    ,async: false    ,method: ‘post‘    ,data: {        upgradeType: function(){        return $("input[name=‘upgradeType‘]:checked").val();        }    }    ,auto: false    ,xhr:xhrOnProgress    ,progress:function(value){//上傳進度回調 value進度值        element.progress(‘demo‘, value+‘%‘)//設定頁面進度條    }    ,accept: ‘file‘ //普通檔案    ,exts: ‘zip‘ //只允許上傳壓縮檔    ,field:‘uploadFile‘    ,bindAction: ‘#test9‘    ,choose: function(obj){        var uploadFileInput=$(".layui-upload-file").val();        var uploadFileName=uploadFileInput.split("\\");        $("#uploadName").text(uploadFileName[uploadFileName.length-1]);    }    ,before: function(obj){        layer.load(); //上傳loading    }    ,done: function(res){        layer.msg("上傳成功");    }    ,error: function(index, upload){        element.progress(‘demo‘, ‘0%‘);        layer.msg(‘上傳失敗‘);    }    });});//建立監聽函數     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;         }     }

可以考慮把 xhrOnProgress 放在一個庫裡面,但不知道能不能直接放到Layui的源碼裡面。

然後就是重點了:改 layui 源碼。

upload.js : 

...//預設配置  Class.prototype.config = {    accept: ‘images‘ //允許上傳的檔案類型:images/file/video/audio    ,exts: ‘‘ //允許上傳的檔案尾碼名    ,auto: true //是否選完檔案後自動上傳    ,bindAction: ‘‘ //手動上傳觸發的元素    ,url: ‘‘ //上傳地址    ,field: ‘file‘ //檔案欄位名    ,method: ‘post‘ //請求上傳的http類型    ,data: {} //請求上傳的額外參數    ,drag: true //是否允許拖拽上傳    ,size: 0 //檔案限制大小,預設不限制    ,number: 0 //允許同時上傳的檔案數,預設不限制    ,multiple: false //是否允許多檔案上傳,不支援ie8-9    ,xhr:function(){}  };...$.ajax({    url: l.url    ,type: l.method    ,data: formData    ,contentType: false     ,processData: false    ,dataType: ‘json‘    ,xhr:l.xhr(function(e){//此處為新添加功能         var percent=Math.floor((e.loaded / e.total)*100);//計算百分比         l.progress(percent);//回調將數值返回     })     ,success: function(res){         successful++;         done(index, res);         allDone();     }     ,error: function(e){         console.log(e)         aborted++;         that.msg(‘請求上傳介面出現異常‘);         error(index);         allDone();     }});...

需要修改的地方標紅了。

這樣就完成了,寫上傳業務的時候不管有沒有寫xhr參數都可以正常提交。

參考:80785180

layui 魔改:上傳時的真實進度條

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.