jQuery监听文件上传实现进度条效果的方法


Posted in Javascript onOctober 16, 2016

原理:

给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);//获得上传结束后服务器返回的数据
  }
});

以上就是小编为大家带来的jQuery监听文件上传实现进度条效果的方法全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
经典海量jQuery插件 大家可以收藏一下
Feb 07 Javascript
alert和confirm功能介绍
May 21 Javascript
jquery制作属于自己的select自定义样式
Nov 23 Javascript
JavaScript中的this引用(推荐)
Aug 05 Javascript
微信小程序 火车票查询实例讲解
Oct 17 Javascript
Angular.js跨controller实现参数传递的两种方法
Feb 20 Javascript
基于JQuery的Ajax方法使用详解
Aug 16 jQuery
原生js实现无缝轮播图
Jan 11 Javascript
原生JavaScript实现的无缝滚动功能详解
Jan 17 Javascript
JavaScript进阶(一)变量声明提升实例分析
May 09 Javascript
Postman参数化实现过程及原理解析
Aug 13 Javascript
Vue3 Composition API的使用简介
Mar 29 Vue.js
浅谈js对象的创建和对6种继承模式的理解和遐想
Oct 16 #Javascript
利用jQuery对无序列表排序的简单方法
Oct 16 #Javascript
JS实现动态增加和删除li标签行的实例代码
Oct 16 #Javascript
js利用appendChild对标签进行排序的实现方法
Oct 16 #Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
Oct 16 #Javascript
JS实现禁止鼠标右键的功能
Oct 15 #Javascript
Vue.js快速入门实例教程
Oct 15 #Javascript
You might like
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
php求一个网段开始与结束IP地址的方法
2015/07/09 PHP
超级简单的图片防盗(HTML),好用
2007/04/08 Javascript
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
Python爬取三国演义的实现方法
2016/09/12 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
Champion官网:美国冠军运动服装
2017/01/25 全球购物
教师考核材料
2014/05/21 职场文书
离职感谢信
2015/01/21 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书