使用 new XMLHttpRequest() 制作下载文件进度条

mui 进度控件使用方法:

检查当前容器(container控件)自身是否包含.mui-progressbar类:

  • 当前容器包含.mui-progressbar类,则以当前容器为目标控件,直接显示进度;
  • 否则,检查当前容器的直接孩子节点是否包含.mui-progressbar类,若存在,则以遍历到的第一个含有.mui-progressbar类的孩子节点为目标控件,显示进度;
  • 若当前容器的直接孩子节点,均不含.mui-progressbar类,则自动创建进度条控件;

如果有多个列表,每个列表在点击下载控件时,必须要先清除上一个列表的进度条显示效果,因此,需要在点击列表时,就要做清除进度条的事件:

//点击下载 jQuery(‘#downloadWarp‘).on(‘tap‘,‘li‘,function(e){   e.stopPropagation();    //判断当前列表是否含有 .mui-progressbar 这个进度条的控件,如果有,则必须删除这个控件的类名    var isProgress = jQuery(‘#downloadNav‘).find(‘.mui-progressbar‘);    if(isProgress.hasClass(‘mui-progressbar‘)){     isProgress.removeClass(‘mui-progressbar‘);   }   //点击列表时,要把当前列表的name及url作为属性添加到download这个html节点上,方便下载时使用    var downloadUrl = jQuery(this).attr(‘data-url‘);    var downloadName = jQuery(this).attr(‘data-name‘);    jQuery(‘#downloadNav‘).find(‘ul>li>span.file-name‘).text(downloadName);    jQuery(‘#downloadNav‘).find(‘ul>li.download-url‘).attr(‘data-url‘,downloadUrl);    //弹出框的切换动画    mui(‘#downloadNav‘).popover(‘toggle‘); });

点击download,激活显示进度条的方法。文件下载,需要根据 XMLHttpRequest (初始化构造函数,它是一个客户端API,是为客户端与服务器之间提供一个传输服务的功能,详情请点击:http://www.jianshu.com/p/22f8...)中的event来判断正在下载数据,总下载数据,是否下载成功等来制作进度条,它的参数为

//总的下载数据 event.loaded //正在下载的数据 event.currentTarget.responseURL //通过它是否为空来判断文件是否下载成功 event.timeStamp //下载文件所需的时间

向服务发送一个HTTP请求

xhr.open(‘GET‘, ‘example.php‘);
xhr.send();

查询进度信息,需要用到 progress 事件,progress的回调函数为:

function updateProgress(event) {
    if (event.lengthComputable) {
         var percentComplete = event.loaded / event.total;
 } }    

上面的代码中,event.total 是需要传输的总字节,event.loaded 是已经传输的字节。如果event.lengthComputable 不为真,则 event.total 等于0。只有 event.lengthComputable 为真的情况下,才会有进度条信息。

//显示进度条
var spanOK = jQuery(‘<span></span>‘); jQuery(‘#downloadNav‘).find(‘.download-url‘).on(‘tap‘,function(){ 

//获取下载文件的url var url = jQuery(this).attr(‘data-url‘); //初始化传输服务 var xhr = new XMLHttpRequest(); //请求数据的方法,调用open()打开这个url xhr.open(‘GET‘,url); //初始化传输服务,每个xhr的传输都是以 onprogress 的事件开始的 xhr.onprogress = function (event) {   //只有 e.lengthComputable 为真,才会有进度条的信息   if (event.lengthComputable) {     var total = event.total;     var loaded = event.loaded;     var isUrl = event.currentTarget.responseURL;     var timeStamp = event.timeStamp;     // percentComplete 为加载时数据 / 总数据,为一个小于1的值     var percentComplete = event.loaded / event.total;     // 判断如果请求的文件url为空,则要提示一个下载失败的错误信息     if(isUrl == ‘‘ || isUrl == null){       mui.toast(‘File download failed, please try again!‘)     }     // 获取进度条的位置     var container = mui(‘#downloadNav .progress‘);     //进度条值,根据这个值来显示进度条,因为percentComplete为一个小于1的小数,而进度条是一个100的值,因此将动态的percentComplete*100取整     var progress = parseInt(percentComplete * 100);     // 下载文件所需的时间 var time = (new Date(timeStamp)).getTime();     // 进度条的值更换变量,为重新定义,可以累加,根据这个累加的值可以看到一个累加显示的进度条     var progressNum = progress++;     // 初始化进度条的值,progress的值 1,进度条显示     if (container.progressbar({ progress: 1 }).show()) {       // 给进度条设置进度值       container.progressbar().setProgress(progressNum);     }     var spanOkWarp = jQuery(‘#downloadNav‘).find(‘ul span.file-name‘);     // 判断当前进度条是否含有 mui-progressbar 控件,如果有,则给这个控件设置进度值     var isProgress = jQuery(‘#downloadNav‘).find(‘.mui-progressbar‘);     if(isProgress.hasClass(‘mui-progressbar‘)){       container.progressbar().setProgress(progressNum);     }     //进度加载之后,在另一个页面打开这个下载好的url     setTimeout(function(){       mui.openWindow({         url:url       });   },time+500); } };   // 发送这个请求   xhr.send(); });

详细参考链接:你不知道的 XMLHttpRequest,来自简书

时间: 2024-11-04 21:51:01

使用 new XMLHttpRequest() 制作下载文件进度条的相关文章

recyclerView中多任务下载文件进度条更新的问题

在recyclerview或listview中进行下载时,由于条目复用等原因会导致下载的进度条更新错乱. 你可能觉得条目复用问题我解决过那么多次,加个tag了啥的就解决了不是. 有这个想法说明你没做过下载的处理.因为在下载的过程中,进度条是一直处于更新状态,所以传统的解觉条目复用的方式并不起作用. 解决方式有两种: 1.进度更新时把进度条进度存到bean中.然后在获取进度的循环中同步刷新adapter. 2.进度更新时把进度条进度存到bean中.写一个轮询刷新adapter.

小小一方士 C# Async\Await 之 上传/下载文件进度条实现原理

关于上传下载文件(图片等),涉及到UI进度条的显示,c#中 System.IProgress提供了相应的api. namespace System { // // 摘要: // 定义进度更新的提供程序. // // 类型参数: // T: // 进度更新值的类型.此类型参数是逆变.即可以使用指定的类型或派生程度更低的类型.有关协变和逆变的详细信息,请参阅 泛型中的协变和逆变. public interface IProgress<in T> { // // 摘要: // 报告进度更新. //

使用tqdm实现下载文件进度条

1.获取下载链接 下载链接为:http://fastsoft.onlinedown.net/down/Fcloudmusicsetup2.5.5.197764.exe 2.使用tqdm实现 2.1.从response的headers中获取文件大小,同时注意:get请求中#stream=True参数的作用是仅让响应头被下载,连接保持打开状态 2.2.以wb模式打开文件 2.3.使用注意调用iter_content,一块一块的遍历要下载的内容,搭配stream=True,此时才开始真正的下载 原始代

赵雅智_android多线程下载带进度条

progressBar说明 在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度.一个进度条也可不确定其进度.在不确定模式下,进度条显示循环动画.这种模式常用于应用程序使用任务的长度是未知的. XML重要属性 android:progressBarStyle:默认进度条样式 android:progressBarStyleHorizontal:水平样式 progressBar重要方法 getMax():返回这个进度条的范围的

Ajax上传文件进度条显示

要实现进度条的显示,就要知道两个参数,上传的大小和总文件的大小 html5提供了一个上传过程事件,在上传过程中不断触发,然后用已上传的大 小/总大小,计算上传的百分比,然后用这个百分比控制div框的显示,就可以 实现上传的进度条效果 前端页面 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Ajax上传文件进度条显示

C# 下载带进度条代码(普通进度条)

<span style="font-size:14px;"> </span><pre name="code" class="csharp"><span style="font-size:14px;"> /// <summary> /// 下载带进度条代码(普通进度条) /// </summary> /// <param name="URL&

AsyncTask的使用 (二)图片下载,进度条

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.Ht

图解CSS3制作圆环形进度条的实例教程

圆环形进度条制作的基本思想还是画出基本的弧线图形,然后CSS3中我们可以控制其旋转来串联基本图形,制造出部分消失的效果,下面就来带大家学习图解CSS3制作圆环形进度条的实例教程 首先,当有人说你能不能做一个圆形进度条效果出来时,如果是静态完整圆形进度条,那么就很简单了: .circleprogress{        width: 160px;        height: 160px;        border:20px solid red;        border-radius: 50

用进度条显示从网络上下载文件进度

/* * 根据上课的案例,利用进度条控件程序进行下载操作.... */public class Aty_HttpDownLoad_ProgressBar extends Activity { private ProgressBar pB; private TextView tv_progress; private static final int DOWNLOADING=1; private static final int DOWNLOAD_SUCCESS=2; private double