用css2属性clip实现网页进度条
前言
看了网上一些关于网页进度条样式的资料,有很多方式实现,针对其展现形式,有用图片的,有用css2属性clip,有用flash的,本人就学会了一种,下面就简单来介绍一下。
css2的属性clip
如果你不是很明白clip属性,那么我就用大白话来解释一下,clip:rect(0px,0px,0px,0px)有四个值,同理是顺时针方向赋值,上右下左,记录改元素裁切方式,
例如:一个元素div,其width:300px;height:300px; clip:rect(0px,100px,60px,0px)
表示裁切的左边距离原元素上边缘0px;
裁切的右边距离原始左边缘100px;
裁切的下边距离原始元素上边缘是60px;
裁切的左边距离原始元素元素左边距离是0px;

如果明白了,那么再来一张图测试一下,如果设置是clip:rect(10px,100px,40px,5px)图片应该啥样子呢?如下

说到这里,我就当你明白了,继续往下说,
所以现在我们要改变的就是裁切元素的右值,让其等于制定的宽度,那么元素就全部呈现出来了。
设置进度条样式
对于css我做的还是比较low的,那么还是要贴出我很low的css代码,
<style type="text/css">
#progressBox{width:300px;height:60px;position:absolute;left:;border:1px solid #000;}
#progressBar{background:blue;opacity:0.3;filter:alpha(opacity=30); width:300px;height:60px;position:absolute;clip:rect(0px,0px,60px,0px);left:;top:;}
#progressText{color:Black;width:300px;height:60px;position:absolute;left:;top:;text-align:center; line-height:60px; font-family:Georgia;font-size:2em;font-weight:bold;}
</style>
页面元素
<body>
<div id="progressBox">
<div id="progressBar"></div>
<div id="progressText">0%</div>
</div>
<input type="button" value="开 始" id="btn" style="position:absolute;left:50%;top:20%;"/>
</body>
这里需要解释一下为啥会有3个元素,一个是元素容器(progressBox)基本就是想突出边框,让用户知道100%应该是有多长的容量,
第二个progressBar是表示不断变化的元素背景色设置为淡蓝色,
第三个是表示进度显示的数值文本
然后现在要做的就是js脚本
因为现在没有与服务器交互所以我就用setInterval来模拟增长因子
timer = setInterval(progressFn, 10);
function progressFn() {
if (cent == max) {
clearInterval(timer);
} else {
divbar.style.clip = "rect(0px," + cent + "px,60px,0px)";
divText.innerHTML = Math.ceil((cent / max) * 100) + "%";
cent++;
}
};
上边这段js是通过改变裁切的右边距实现展示进度条背景色,同时改变进度文本值。
XMLHttpRequest的progress事件实现前后交互的进度条显示
利用XMLHttpRequest第二版还定义的progress事件可以知道上传进度,来配合我们页面前端的展示进度来真正实现有后端交互的进度条
先上代码
var xhr = new XMLHttpRequest();
xhr.timeout = 8000;
xhr.open('POST', form.action);
xhr.send(formData);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
console.log("xhr.responseText", xhr.responseText);
} else {
console.log("xhr.statusText", xhr.statusText);
}
};
xhr.onprogress = updateProgress;
//xhr.upload.onprogress = updateProgress;
function updateProgress(event) {
if (event.lengthComputable) {
var percentComplete = event.loaded / event.total;
console.log(event.loaded, event.total, 300 * percentComplete);
progressFn(300 * percentComplete, max);
}
}
xhr.ontimeout = function (event) {
alert('请求超时!');
}
其中的event.loaded表示当前加载了多少字节流,而event.total表示总共有多少字节流 得到这样一个百分比,
然后调用我们事先定义好的progressFn()函数就ok了,感觉还是挺方便的。
当然除了这种方式还有我前面提到过的配合flash来调用我们实现定义好的函数等。
下载地址  演示效果图
以上就是我今天想要分享的小知识点,本人水平有限,如果有错误和建议
还恳请指出,如果觉得对你有用,请支持一下。
用css2属性clip实现网页进度条的更多相关文章
- CSS3 圆形时钟式网页进度条
		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ... 
- clip实现圆环进度条
		效果主要通过clip和transform:rotate实现 把圆环分为左右两个部分,通过角度旋转对图片剪切旋转角度<=180度的时候之旋转右边,当大于180度时右边固定旋转180度的同时旋转左边 ... 
- Javascript 及 CSS3 实现进度条效果
		Javascript 及 CSS3 实现进度条效果 一:css2 属性clip实现网页进度条: 在实现之前,我们先来介绍一下clip属性,因为这个属性在css2.1中很少使用到,所以我们有必要来了解 ... 
- HTML5多图片拖拽上传带进度条
		前言 昨天利用css2的clip属性实现了网页进度条觉得还不错,但是很多情况下,我们在那些时候用进度条呢,一般网页加载的时候如果有需要可以用,那么问题就来了,怎么才算整个加载完毕呢,是页面主要模块加载 ... 
- 详解Bootstrap进度条组件
		在网页中,进度条的效果并不少见,如:平分系统.加载状态等,进度条组件使用了css3的transition和animation属性来完成一些特效,这些特效在IE9及IE9以下版本.Firefox的老版本 ... 
- Android ProgressBar 反向进度条/进度条从右到左走
		近期的项目,有个需求须要使用条状图显示比例,而且右对齐,见下图: 我想到了使用进度条,这样不就不须要在代码动态绘制条状了,省了非常多活. 那么进度条如何从右向左显示呢? 方案一: 将ProgressB ... 
- CSS制作环形进度条
		参考来源 <Radial progress indicator using CSS>,该文核心是用纯CSS来做一个环形的进度条.纯css的意思就是连百分比这种数字,都是css生成的.文章作 ... 
- JS框架_(Progress.js)圆形动画进度条
		百度云盘 传送门 密码: 6mcf 圆形动画进度条效果: <!DOCTYPE html> <html lang="en"> <head> < ... 
- cocos2d-x视频控件VideoPlayer的用户操作栏进度条去除(转载)
		目前遇到两个问题: (1)视频控件移除有问题,会报异常. (2)视频控件有用户操作栏,用户点击屏幕会停止视频播放. 对于第一个问题,主要是移除控件时冲突引起的,目前简单处理是做一个延时处理,先stop ... 
随机推荐
- HDU 1018-Big Number(数学)
			Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ... 
- [原创].NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇)
			原文:[原创].NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇) .NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇) 前言:上一篇文章讲述了一些实现DAL的理论,本 ... 
- 【转】JTree调用UpdateUI()抛空指针
			最近在做东西时发现,当在线程里面刷新JTree时,有时会出现空指针错误,在网上查了很久,终于发现以下解决方法: JTree中调用UpdateUI()报以下错误 java.lang.NullPointe ... 
- php 二维数组传递给 js 问题解决记录
			需求: php从数据库中读取到二维数组.传递到js中 实现步骤: php:json_encode → json → js:eval 即在php中使用json_encode()将php的二维数 ... 
- 日积月累:weightSum和layout_weight属性合用
			解说一:weightSum和layout_weight属性合用 android:weightSum属性:定义weight总和的最大值. 假设为指定该值,全部子视图的layout_weight属性的累加 ... 
- UVA 847 - A Multiplication Game(游戏)
			UVA 847 - A Multiplication Game 题目链接 题意:一个数一開始是1,每次轮流乘2-9,谁先大于n谁就赢,问谁胜 思路:博弈,找出必胜态.2-9为stan,10-18为ol ... 
- WEB功能测试说明
			站点功能測试就是对产品的各功能进行验证.依据功能測试用例,逐项測试.检查产品是否达到用户 要求的功能.经常使用的測试方法例如以下: 1.页面链接检查: 每个链接是否都有相应的页面.而且页面之间切换工具 ... 
- 【Java】实现一个根据日期判断星座程序的编写
			思路 直接根据月份做索引,然后根据日期边界判断是本月的星座还是上月的. 算法 private static String getAstro(int month, int day) { String[] ... 
- WPF学习(7)命令
			在上一篇中,我们学习了WPF的路由事件,而在本节将学习一个更为抽象且松耦合的事件版本,即命令.最明显的区别是,事件是与用户动作相关联的,而命令是那些与用户界面想分离的动作,例如我们最熟悉的剪切(Cut ... 
- quick-cocos2d-x教程8:程序框架内lib文件夹分析
			lib文件夹是如今全部文件夹中最复杂的,包括了整个运行所需的库文件.我们简单看下,在开发初期,不须要深入到这个库里去研究 cocos2d-x 文件夹就是c++版的原始文件 framework_prec ... 
