使用 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,来自简书
使用 new XMLHttpRequest() 制作下载文件进度条的更多相关文章
- python实现socket上传下载文件-进度条显示
在python的socket编程中,可以实现上传下载文件,并且在下载的时候,显示进度条,具体的流程如下图所示: 1. 服务器端代码如下: [root@python 519]# cat server.p ...
- 使用tqdm实现下载文件进度条
1.获取下载链接 下载链接为:http://fastsoft.onlinedown.net/down/Fcloudmusicsetup2.5.5.197764.exe 2.使用tqdm实现 2.1.从 ...
- Ajax上传文件进度条显示
要实现进度条的显示,就要知道两个参数,上传的大小和总文件的大小 html5提供了一个上传过程事件,在上传过程中不断触发,然后用已上传的大 小/总大小,计算上传的百分比,然后用这个百分比控制div框的显 ...
- 图解CSS3制作圆环形进度条的实例教程
圆环形进度条制作的基本思想还是画出基本的弧线图形,然后CSS3中我们可以控制其旋转来串联基本图形,制造出部分消失的效果,下面就来带大家学习图解CSS3制作圆环形进度条的实例教程 首先,当有人说你能不能 ...
- 详解用CSS3制作圆形滚动进度条动画效果
主 题 今天手把手教大家用CSS3制作圆形滚动进度条动画,想不会都难!那么,到底是什么东东呢?先不急,之前我分享了一个css实现进度条效果的博客<CSS实现进度条和订单进度条>,但是呢, ...
- iOS之UI--Quartz2D的入门应用--重绘下载圆形进度条
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- node实现http上传文件进度条 -我们到底能走多远系列(37)
我们到底能走多远系列(37) 扯淡: 又到了一年一度的跳槽季,相信你一定准备好了,每每跳槽,总有好多的路让你选,我们的未来也正是这一个个选择机会组合起来的结果,所以尽可能的找出自己想要的是什么再做决定 ...
- AFHTTPSessionManager下载文件 及下载中 进度条处理,进度条处理需要特别注意,要加载NSRunLoop 中
1.下载文件 和进度条处理代码 - (void)timer:(NSTimer *)timer{ // 另一个View中 进度条progress属性赋值 _downloadView.progress = ...
- php上传文件进度条
ps:本文转自脚本之家 Web应用中常需要提供文件上传的功能.典型的场景包括用户头像上传.相册图片上传等.当需要上传的文件比较大的时候,提供一个显示上传进度的进度条就很有必要了. 在PHP 5.4以前 ...
随机推荐
- 树莓派配置wifi链接
使用树莓派链接网络是必然的,这里讲一讲如何连接到wifi. 扫描WIFI sudo iwlist wlan0 scan 扫描后得到以下结果 这里的“ESSID”是无线网的名称. 添加有密码的WIFI网 ...
- MacOS下命令行安装神器brew
1.安装brew:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mast ...
- springBoot(10)---logback日志
logback日志 一.概述 和log4j优点: 实际上,这两个日志框架都出自同一个开发者之手,Logback 相对于 Log4J 有更多的优点 (1)logback不仅性能提升了,初始化内存加载也 ...
- springBoot(2)---快速创建项目,初解jackson
快速创建项目,初解jackson 一.快速创建项目 springboot官网提供了工具类自动创建web应用:网址:http://start.spring.io/ 官网页面 1.快速创建一个 选择web ...
- 我对开源C++网络库简单应用总结
网上有篇文章<开源免费的C/C++网络库(c/c++ sockets library) 七剑下天山>,看了之后觉得每个库都不错,这里我具体下载这些库看一下,简单总结一下: 顺便添加一些我找 ...
- HP-JavaUtil: xls 操作类
Written In The Font 谢谢,陈明.哈哈!共勉,努力搞定它. 路漫漫其修远兮,吾将上下而求索 Content ExportExcelAndSave( String[] header, ...
- 菜鸟系列docker——docker镜像中(4)
docker镜像命令 该章节主要介绍docker image相关命令实践操作,建议都一起跑一边 1. docker images 列举本机docker镜像 [centos@jiliguo docker ...
- mybatis的延迟加载、一级缓存、二级缓存
mybatis的延迟加载.一级缓存.二级缓存 mybatis是什么? mybatis是一个持久层框架,是apache下的开源项目,前身是itbatis,是一个不完全的ORM框架,mybatis提供输入 ...
- python工程遇到的错误
1.SyntaxError: Non-ASCII character '\xe5' in file D:\eclipseworkspace\test\test_urllib2.py on line2 ...
- Shuffle过程
Shuffle过程 在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整 ...