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,来自简书

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

  1. python实现socket上传下载文件-进度条显示

    在python的socket编程中,可以实现上传下载文件,并且在下载的时候,显示进度条,具体的流程如下图所示: 1. 服务器端代码如下: [root@python 519]# cat server.p ...

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

    1.获取下载链接 下载链接为:http://fastsoft.onlinedown.net/down/Fcloudmusicsetup2.5.5.197764.exe 2.使用tqdm实现 2.1.从 ...

  3. Ajax上传文件进度条显示

    要实现进度条的显示,就要知道两个参数,上传的大小和总文件的大小 html5提供了一个上传过程事件,在上传过程中不断触发,然后用已上传的大 小/总大小,计算上传的百分比,然后用这个百分比控制div框的显 ...

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

    圆环形进度条制作的基本思想还是画出基本的弧线图形,然后CSS3中我们可以控制其旋转来串联基本图形,制造出部分消失的效果,下面就来带大家学习图解CSS3制作圆环形进度条的实例教程 首先,当有人说你能不能 ...

  5. 详解用CSS3制作圆形滚动进度条动画效果

    主  题 今天手把手教大家用CSS3制作圆形滚动进度条动画,想不会都难!那么,到底是什么东东呢?先不急,之前我分享了一个css实现进度条效果的博客<CSS实现进度条和订单进度条>,但是呢, ...

  6. iOS之UI--Quartz2D的入门应用--重绘下载圆形进度条

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  7. node实现http上传文件进度条 -我们到底能走多远系列(37)

    我们到底能走多远系列(37) 扯淡: 又到了一年一度的跳槽季,相信你一定准备好了,每每跳槽,总有好多的路让你选,我们的未来也正是这一个个选择机会组合起来的结果,所以尽可能的找出自己想要的是什么再做决定 ...

  8. AFHTTPSessionManager下载文件 及下载中 进度条处理,进度条处理需要特别注意,要加载NSRunLoop 中

    1.下载文件 和进度条处理代码 - (void)timer:(NSTimer *)timer{ // 另一个View中 进度条progress属性赋值 _downloadView.progress = ...

  9. php上传文件进度条

    ps:本文转自脚本之家 Web应用中常需要提供文件上传的功能.典型的场景包括用户头像上传.相册图片上传等.当需要上传的文件比较大的时候,提供一个显示上传进度的进度条就很有必要了. 在PHP 5.4以前 ...

随机推荐

  1. [CERC2014] Virus synthesis

    设f[i]为形成极长回文串i的最小操作数.答案为min f[i]+n-len[i]. 在不形成偶回文的情况下形成奇回文的最小操作数为该串长度.可以不考虑(但ans赋为len). 正确性基于: 1)奇. ...

  2. parseInt和map方法使用案例分析

    ["1","2","3"].map(parseInt) //[1,NaN,NaN] 先看map()方法 定义和用法 map() 方法返回一个 ...

  3. visual Studio 2017 扩展开发(二)《菜单图标详解》

    在上一篇我们在菜单栏创建了一个菜单,菜单上显示了一个图标跟文本.那么我们自己创建的菜单如何修改自定义的菜单图标呢.下面娓娓道来..... 首先你要有一个图,创建一个32位的位图.这个位图的像素是16p ...

  4. Android--UI之ImageSwitcher

    前言 这篇博客来聊一聊AndroidUI开发中ImageSwitcher控件的使用.ImageSwitcher控件与ImageView类似,都可以用于显示图片,但是ImageSwitcher通过名字可 ...

  5. XML技术思想

    百科名片: 可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语 ...

  6. Spring AOP实战例子与springmvc整合不起效果的解决办法

    在使用AOP之前,首先我们先了解一下什么是AOP吧.在网上很多人将AOP翻译为“面向切面编程”,什么是面向切面?与面向对象有什么区别呢? 在回答这两个问题之前,我们先要明白切面的概念. 切面由切点与增 ...

  7. Unity中控制天空盒移动的解决办法

    为了使天空盒更真实,需要控制天空盒动态旋转. 网上找到的方法是: float num = RenderSettings.skybox.GetFloat("_Rotation"); ...

  8. Docker 简述

    转自:https://cloud.tencent.com/developer/article/1354393 虚拟机和 docker 的区别,如下图: Image (镜像) 镜像不包含任何动态数据,其 ...

  9. python 加密算法及其相关模块的学习(hashlib,random,string,math)

    加密算法介绍 一,HASH Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种 ...

  10. 结构型---组合模式(Composite Pattern)

    组合模式的定义 组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合. 组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口 ...