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. mybatis框架(1)---mybatis入门

    mybatis入门   MyBatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了goog ...

  2. mysql 开发进阶篇系列 51 权限与安全(权限表user,db详细介绍 )

    一.概述 mysql 的权限系统主要用来对连接到数据库的用户进行权限验证,以此来判断此用户是否属于合法用户,以及合法用户给予的相应数据库权限.下面将介绍权限系统的工作原理,以及将要熟练掌握账号的管理和 ...

  3. ①小姐,来桶全家桶不?(Servlet)

    一.前言 小生不才,大二下半学期第二个星期,近11月博客园.星期六闲来看看经典书.重温下Serlvet. 二.温故而知新:超文本转移协议HTTP HTTP协议是通过互联网(internet)或企业内部 ...

  4. UVa OJ 120

    Background背景 Stacks and Queues are often considered the bread and butter of data structures and find ...

  5. iOS逆向开发(5):微信强制升级的突破 | 多开 | 微信5.0

    接下来的几篇文章,小程以微信为例,实战地演示一下:如何注入iOS的APP.其中使用到的知识,基本在前面的文章中都有介绍到. 小白:小程,我想用回旧版本的微信! 小程:为什么要用旧版本微信呢? 小白:你 ...

  6. Linux下获取java堆栈文件并进行分析

    当服务器内存飙升或者cpu负载飙升的时候,可以使用如下步骤排查问题: 1.终端输入top命令,键盘大写的情况下按P(cpu负载率从高到低排序)或者M(内存使用率从高到低排序),可以查看导致cpu或者内 ...

  7. Android studio 下 JNI 开发实例

    在AS中进行 NDK 开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: 到底什么是JNI,什么是NDK? 何为“交叉编译”? 先看什么是 JNI?JNI 的全称就是 Java Native In ...

  8. go基础系列:简介

    1.Go简介 Go语言是编译型.静态类型的类C的语言,并带有GC(垃圾收集器,garbage collection).这意味着什么? 另外,Go是一种非常严格的语言,它几乎总是要求我们"以标 ...

  9. 关于VUE首屏加载过长的优化,VUE项目开发优化

    1. 按需引入UI组件 当下市面上流行的UI组件基本都支持按需加载,本文以Element UI为例: (1)     新建一个elementUI.js文件 (2)     访问地址找到按需引入方式的说 ...

  10. for 循环 和 Array 数组对象

    博客地址:https://ainyi.com/12 for 循环 和 Array 数组对象方法 for for-in for-of forEach效率比较 - 四种循环,遍历长度为 1000000 的 ...