带进度显示的视频上传

太久太久太久没有更新博客了。。。。。。。
今天做了一个带进度条的视频上传,做个小结。

实现效果如下:

效果图

实现原理:

XMLHttpRequest对象的upload属性绑定onprogress方法监听视频上传的过程。
因为jq的XMLHttpRequest对象默认内部生成了,但用户也可以通过 xhr (默认在 IE 下是 ActiveXObject 而其他情况下是 XMLHttpRequest , jQuery 1.3 之前不可用)选项来传递一个自己创建的 xhr 对象。

部分代码:

<!--视频上传进度显示-->       
<div class="upload-status">
         <div class="name"></div>
	    <div class="progress">
         <div class="progress-status"></div>
         <span class="num"></span>
		 </div>
  </div>

  
/*视频上传进度*/
.upload-status{
  display:none;
  height:116px;
  background:rgba(252,242,239,1);
  border-radius:0px 0px 4px 4px;
  padding-top:30px;
  padding-left:140px;
  box-sizing:border-box;
  margin-bottom: 20px;
}
.upload-status .name{
  margin-bottom:12px;
  font-size:16px;
}
.upload-status .progress{
  width:417px;
  height:14px;
  background:rgba(235,137,27,0.1);
  border-radius:4px;
  position:relative;
}
.upload-status .progress-status{
  width:0%;
  height:14px;
  background:rgba(235,137,27,1);
  border-radius:4px;
}
.upload-status .num{
  position:absolute;
     top: -5px;
    right: -100px;
}
 //封装方法,给XMLHttpRequest对象绑定监听函数
 //此段代码源自网上
let xhrOnProgress=function(fun) {
	//绑定监听
    xhrOnProgress.onprogress = fun; 
        //使用闭包实现监听绑定
        return function() {
            //获得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({
      type: 'POST',
      url: url,//视频上传接口地址
      dataType: 'json',
      data: formData,//发送数据
      contentType: false,//不处理contentType
      processData: false,//不处理表单数据
      xhr:xhrOnProgress(function(e){   
      	 //event.total是需要传输的总字节,event.loaded是已经传输的字节         
          var percent = (e.loaded / e.total * 100).toFixed(2);
           console.log(percent); 
           //进度更新显示
           $('.upload-status .num').html( percent + "%");
           $('.progress-status').css('width', percent + "%");
      }),
       success: function(data) {
       },
       error: function(data) {          
       }
    });
         

注意:

一定是ajax异步请求,不是同步!!!因为不小心带入async:false,一直发送同步请求。怎么调试都没拿不到返回值,花了很长时间,引以为戒!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值