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 相关文章推荐
js相册效果代码(点击创建即可)
Apr 16 Javascript
Knockout text绑定DOM的使用方法
Nov 15 Javascript
利用javascript数组长度循环数组内所有元素
Dec 27 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
Feb 19 Javascript
js中的caller和callee属性介绍和例子
Jun 07 Javascript
js实现的倒计时按钮实例
Jun 24 Javascript
JS DOM实现鼠标滑动图片效果
Sep 17 Javascript
node 利用进程通信实现Cluster共享内存
Oct 27 Javascript
JS学习笔记之闭包小案例分析
May 29 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
Nov 11 jQuery
vue 图片裁剪上传组件的实现
Nov 12 Javascript
实用的 vue tags 创建缓存导航的过程实现
Dec 03 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
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
cakephp常见知识点汇总
2017/02/24 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
Javascript 设计模式(二) 闭包
2010/05/26 Javascript
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
2016/01/14 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
微信小程序 扎金花简单实例
2017/02/21 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
python 带时区的日期格式化操作
2020/10/23 Python
python爬取抖音视频的实例分析
2021/01/19 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
公司授权委托书
2014/04/04 职场文书
留守儿童工作方案
2014/06/02 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
Python 中random 库的详细使用
2021/06/03 Python