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 相关文章推荐
javascript 写类方式之六
Jul 05 Javascript
菜鸟javascript基础整理1
Dec 06 Javascript
jquery如何改变html标签的样式(两种实现方法)
Jan 16 Javascript
jquery入门必备的基本认识及实例(整理)
Jun 24 Javascript
jquery实现input输入框实时输入触发事件代码
Jan 28 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
Dec 13 Javascript
JavaScript操作 url 中 search 部分方法函数
Jun 15 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
Aug 31 Javascript
Vue 中使用 CSS Modules优雅方法
Apr 09 Javascript
ligerUI的ligerDialog关闭刷新的方法
Sep 27 Javascript
JS实现小米轮播图
Sep 21 Javascript
Nuxt.js nuxt-link与router-link的区别说明
Nov 06 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 pack与unpack 摸板字符字符含义
2009/10/29 PHP
php流量统计功能的实现代码
2012/09/29 PHP
php中的strpos使用示例
2014/02/27 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
nginx 设置多个站跨域
2021/03/09 Servers
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
python进阶教程之文本文件的读取和写入
2014/08/29 Python
python select.select模块通信全过程解析
2017/09/20 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
对公司合理化的建议书
2014/03/12 职场文书
党校培训自我鉴定范文
2014/03/20 职场文书
师德师风承诺书
2014/05/23 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
老兵退伍标语
2014/10/07 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
小学课改工作总结
2015/08/13 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫
Java的Object类的九种方法
2022/04/13 Java/Android