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 相关文章推荐
UserData用法总结 lanyu出品
Jul 01 Javascript
js简单实现让文本框内容逐个字的显示出来
Oct 22 Javascript
jQuery中的$.ajax()方法应用
May 06 Javascript
解决checkbox的attr(checked)一直为undefined问题
Jun 16 Javascript
node.js中的http.createServer方法使用说明
Dec 14 Javascript
JavaScript中关联原型链属性特性
Feb 13 Javascript
bootstrap modal+gridview实现弹出框效果
Aug 15 Javascript
JS运动特效之完美运动框架实例分析
Jan 24 Javascript
JS中Object对象的原型概念基础
Jan 29 Javascript
在vue中v-bind使用三目运算符绑定class的实例
Sep 29 Javascript
express启用https使用小记
May 21 Javascript
Vue实现导航栏点击当前标签变色功能
Aug 19 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
探寻PHP脚本不报错的原因
2014/06/12 PHP
php计算title标题相似比的方法
2015/07/29 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
2019/11/13 PHP
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
vue2.0全局组件之pdf详解
2017/06/26 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
js实现扫雷源代码
2020/11/27 Javascript
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
python比较2个xml内容的方法
2015/05/11 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
python安装scipy的步骤解析
2019/09/28 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
印度民族服装购物网站:BIBA
2019/08/05 全球购物
经济信息管理专业大学生求职信
2013/09/27 职场文书
大一学生的职业生涯规划书范文
2014/01/19 职场文书
学校消防安全制度
2014/01/30 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
法人授权委托书
2014/09/16 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
检讨书范文
2019/04/16 职场文书
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
详解Python中*args和**kwargs的使用
2022/04/07 Python