jQuery監聽檔案上傳實現進度條效果
原理:
給XMLHttpRequest物件的upload屬性繫結onprogress方法監聽上傳過程
var xhr=new XMLHttpRequest(); xhr.upload.onprogress=function(e){}
因為jQuery預設使用的XMLHttpRequest物件是內部生成的無法直接給jq的xhr繫結onprogress方法
所以只要給jQuery重新生成一個繫結了onprogress的XMLHttpRequest物件即可實現
首先封裝一個方法 傳入一個監聽函式 返回一個繫結了監聽函式的XMLHttpRequest物件
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;
}
}
上傳時使用$.ajax方法
$.ajax({
url: url,
type: 'POST',
xhr:xhrOnProgress(function(e){
var percent=e.loaded / e.total;//計算百分比
})
});
使用HW.js檔案上傳工具 自帶進度條效果 支援繫結自定義監聽函式,支援上傳實時預覽(HTML5實現 無需伺服器)HW.js
<div id="cover" class="HW_upload">請選擇要上傳的檔案</div>
<script>
var upload= new HW.Widget.upload.Create({
target:'#cover',//指定上傳控制元件
url:"/upload.php",//上傳地址
//設定允許上傳的檔案大小 單位為kb 預設為 4096
maxSize:2048,
//開啟多檔案上傳
mult:false,
//設定上傳按鈕的文字
uploadText:'請選擇要上傳的檔案',
//設定上傳超時限制 單位為分鐘 預設為20分鐘
timeout:20,
//設定允許上傳的檔案型別 預設為['png','jpg','jpeg']
// accept:['jpg'],
//設定檔案上傳引數名 預設為HW_upload_input
inputName:'cover',
//設定控制元件為圖片上傳 預設為true 為false時則不開啟檔案預覽
isImage:true,
//自定義檔案檢查函式 預設檢測檔案大小 型別
// fileCheck:function(file){return true;},
viewSize:[500,300],//設定圖片預覽框寬高 預設為400,300
viewImageWidth:70,//設定預覽圖片寬度預設為80
done:function(data){
alert(data);//獲得上傳結束後伺服器返回的資料
}
});
作者: Hacker丶wand
連結:http://www.imooc.com/article/5879
來源:慕課網
相關文章
- PHP檔案上傳進度條完整程式實現 jQuery Ajax apcPHPjQuery
- HTML5向量實現檔案上傳進度條HTML
- 向量HTML5實現檔案上傳進度條HTML
- 上傳檔案帶進度條
- H5拖放非同步檔案上傳之二——上傳進度監聽H5非同步
- 帶進度條的檔案上傳
- js實現帶上傳進度的檔案上傳JS
- Android 史上最優雅的實現檔案上傳、下載及進度的監聽Android
- jQuery實進度條效果詳解jQuery
- vue/js實現檔案流下載,檔案下載進度監聽VueJS
- 基於HT for Web向量實現HTML5檔案上傳進度條WebHTML
- 基於HT for Web向量實現HTML5上傳檔案進度條WebHTML
- Android OkHttp+RxJava 史上最優雅的實現檔案上傳/下載進度的監聽AndroidHTTPRxJava
- jQuery 進度條效果程式碼jQuery
- 基於uploadify.js實現多檔案上傳和上傳進度條的顯示JS
- flutter使用dio實現 檔案下載並實現進度監聽總結Flutter
- 贊!帶進度條的 jQuery 檔案拖放上傳外掛jQuery
- 檔案上傳進度提示
- iOS實現音訊進度條效果iOS音訊
- 實現環形進度條效果【一】
- jQuery進度條效果程式碼例項jQuery
- 一行程式碼實現Okhttp,Retrofit,Glide下載上傳進度監聽行程HTTPIDE
- CSS3實現原型進度條效果CSSS3原型
- OSS實現檔案下載進度條顯示
- 使用OkHttp實現下載的進度監聽和斷點續傳HTTP斷點
- css實現螺紋動態進度條效果CSS
- Javascript 及 CSS3 實現進度條效果JavaScriptCSSS3
- Flex4/Flash多檔案上傳(帶進度條)例項分享Flex
- jquery defered的progress方法實現進度條jQuery
- jQuery環形旋轉載入進度條效果jQuery
- canvas實現具有粒子效果的動態進度條Canvas
- Node.js:上傳檔案,服務端如何獲取檔案上傳進度Node.js服務端
- ajax實現檔案上傳
- HttpWebChilent上傳與下載進度條HTTPWeb
- PHP實現單檔案、多檔案上傳 封裝 物件導向實現檔案上傳PHP封裝物件
- vue中頁面載入進度條效果的實現Vue
- js結合progress標籤實現的進度條效果JS
- vue中檔案上傳阿里雲並獲取上傳進度Vue阿里