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弹出层插件简化版代码下载
Oct 16 Javascript
JS的get和set使用示例
Feb 20 Javascript
javascript常用的正则表达式实例
May 15 Javascript
javascript实现倒计时N秒后网页自动跳转代码
Dec 11 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
Sep 08 Javascript
js获取隐藏元素的宽高
Feb 24 Javascript
JavaScript实现分页效果
Mar 28 Javascript
Vue写一个简单的倒计时按钮功能
Apr 20 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
Jun 01 Javascript
VueCli3构建TS项目的方法步骤
Nov 07 Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
Nov 12 Javascript
react实现复选框全选和反选组件效果
Aug 25 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
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
PHP中for循环语句的几种变型
2007/03/16 PHP
php和html的区别点详细总结
2019/09/24 PHP
php5与php7的区别点总结
2019/10/11 PHP
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
Python中的连接符(+、+=)示例详解
2017/01/13 Python
深入理解Django中内置的用户认证
2017/10/06 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
python3 简单实现组合设计模式
2020/07/02 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
幼儿园小班教学反思
2014/02/02 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
普通话宣传标语
2014/06/26 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
道歉短信大全
2015/05/12 职场文书
法制教育讲座心得体会
2016/01/14 职场文书