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 相关文章推荐
node.js中的favicon.ico请求问题处理
Dec 15 Javascript
js拆分字符串并将分割的数据放到数组中的方法
May 06 Javascript
浅谈JQ中mouseover和mouseenter的区别
Sep 13 Javascript
js实现图片360度旋转
Jan 22 Javascript
vue+axios实现登录拦截的实例代码
May 22 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
Aug 23 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
Sep 08 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
May 16 Javascript
8 个有用的JS技巧(推荐)
Jul 03 Javascript
微信小程序tabBar 返回tabBar不刷新页面
Jul 25 Javascript
微信小程序实现多图上传
Jun 19 Javascript
js实现列表按字母排序
Aug 11 Javascript
浅谈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
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
2014/06/05 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
js控制框架刷新
2008/08/01 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
只需20行代码就可以写出CSS覆盖率测试脚本
2013/04/24 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
js模拟微博发布消息
2017/02/23 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
vue编写简单的购物车功能
2021/01/08 Vue.js
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
Pandas标记删除重复记录的方法
2018/04/08 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
路政管理专业推荐信
2013/11/11 职场文书
车间统计员岗位职责
2014/01/05 职场文书
邓小平理论心得体会
2014/09/09 职场文书
学年个人总结范文
2015/03/05 职场文书
歼十出击观后感
2015/06/11 职场文书