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 学习 几种常用方法
Jun 11 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
Apr 07 Javascript
jquery中each方法示例和常用选择器
Jul 08 Javascript
vue实现百度搜索下拉提示功能实例
Jun 14 Javascript
详解vue跨组件通信的几种方法
Jun 15 Javascript
js实现从左向右滑动式轮播图效果
Jul 07 Javascript
详解Vue微信公众号开发踩坑全记录
Aug 21 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
Dec 18 Javascript
JS实现的缓冲运动效果示例
Apr 30 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
Aug 07 Javascript
vue页面更新patch的实现示例
Mar 25 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 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序列化反序列化的方法
2015/10/27 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
jquery each()源代码
2011/02/14 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
基于Python的接口测试框架实例
2016/11/04 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
领导调研接待方案
2014/02/27 职场文书
高中生评语大全
2014/04/25 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
护士个人总结范文
2015/02/13 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
MYSQL 运算符总结
2021/11/11 MySQL