Javascript 及 CSS3 实现进度条效果

一:css2 属性clip实现网页进度条;

 在实现之前,我们先来介绍一下clip属性,因为这个属性在css2.1中很少使用到,所以我们有必要来了解一下;

浏览器支持程度:所有主流浏览器都支持 clip 属性。

Clip属性在w3c官网是这样描述的:通过对元素进行裁剪来控制元素的可视区域,默认情况下 元素是不进行任何裁剪的。

Clip裁剪的语法如下:

.xx {clip:rect(<top>, <right>, <bottom>, <left>)}

Rect属性需要四个值,top,right,bottom,left;他们之间需要使用逗号隔开。遵循顺时针旋转规则,和我们的css中的margin,padding书写顺序一样的。

在css2.1中,rect()的<top>,<bottom>指定偏移量是从元素的盒子顶部边缘算起的,<left>,<right>指定的偏移量是从元素的盒子左边边缘算起的。如下:

我们可以再来看一个简单的demo,

如下css

p#one { clip: rect(5px, 40px, 45px, 5px); }

p#two { clip: rect(5px, 55px, 45px, 5px); }

上面的例子是在50X55px的长方形盒子中是行剪切,得到虚线的长方形:

如下图:

我们现在可以先来看一个进度条的demo;

HTML代码如下:

<h2>使用clip实现裁剪demo</h2>
<div id="progress-box" class="progress-box">
    <div id="progress-bar" class="progress-bar"></div>
    <div id="progress-text" class="progress-text">0%</div>
</div>

CSS代码如下:

.progress-box{position:absolute;left:0;width:300px;height:60px;border:1px solid #000;margin-left:20px;}
.progress-bar{position:absolute;left:0;top:0;width:300px;height:60px;clip:rect(0px,0px,60px,0px);background:red;}
.progress-text{position:absolute;left:0;top:0;width:300px;height:60px;color:Black;text-align:center; line-height:60px; font-family:Georgia;font-size:2em;font-weight:bold;}

这里需要解释一下上面的HTML3个div,一个是元素容器(progress-box)基本就是想突出边框,让用户知道100%应该是有多长的容量,

第二个progress-bar是表示不断变化的元素背景色设置为红色,

第三个是表示进度显示的数值文本。

截图效果如下,通过不断的改变rect的值,如下所示:

为了演示效果,我们需要一个简单的JS中的setInterval代码来演示进度条的效果;如下setInterval的代码;

var bar = document.getElementById("progress-bar"),
      text = document.getElementById("progress-text");
var cent = 0,
      max = 300;
var timer = setInterval(progressFn, 30);
function progressFn() {
    if(cent > max) {
        cent = 0;
        timer = setInterval(arguments.callee(), 30);
    }else {
        bar.style.clip = "rect(0px," + cent + "px,60px,0px)";
        text.innerHTML = Math.ceil((cent / max) * 100) + "%";
        cent++;
    }
}

demo如下效果;

使用clip实现裁剪demo

 二:使用进度事件(progress)与服务器端交互 来实现网页进度条;

进度事件(progress) : 定义了与客户端服务器通信有关的事件,有以下6个进度事件。

loadstart:在接收到相应数据的第一个字节时触发。

progress:在接收相应期间持续不断触发。

error:在请求发生错误时触发。

abort:在因为调用abort()方法而终止链接时触发。

load:在接收到完整的相应数据时触发。

loadend:在通信完成或者触发error、abort或load事件后触发。

每个请求不对触发Loadstart事件开始,接下来是一或多个progress事件,然后触发error、abort或load事件中的一个,最后以触发loadend事件结束。

支持前5个事件的浏览器有Firefox 3.5+、Safari 4+、Chrome、iOS版Safari和Android版WebKit。

这个事件会在浏览器接收新数据期间周期性地触发。而onprogress事件处理程序会接收到一个event对象,其target属性是XHR对象,但包含着三个额外的属性:lengthComputable、position和totalSize。其中,lengthComputable是一个表示进度信息是否可用的布尔值,position表示已经接收的字节数,totalSize表示根据Content-Length相应头部确定的预期字节数。有了这些信息,我们就可以为用户创建一个进度指示器了。如下截图有上面介绍的三个参数;

HTML代码如下:

<h2>使用clip实现裁剪demo</h2>
<div id="progress-box" class="progress-box">
    <div id="progress-bar" class="progress-bar"></div>
    <div id="progress-text" class="progress-text">0%</div>
</div>
<div id="status"></div>

与服务器端交互的代码如下:

var divbar = document.getElementById("progress-bar"),
    divText = document.getElementById("progress-text");
var cent = 0,
    max = 300;
function createXHR(){
     var xhr;
     if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
          xhr=new XMLHttpRequest();
     }else{ // code for IE6, IE5
          xhr=new ActiveXObject("Microsoft.XMLHTTP");
     }
     return xhr;
 }
 var xhr = createXHR();
 xhr.onload = function() {
    if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
          alert(xhr.responseText);
    }else {
          alert("Request was unsuccessful: " + xhr.status);
    }
 }
 xhr.onprogress = function(event) {
    var divStatus = document.getElementById("status");
    if (event.lengthComputable) {
           divStatus.innerHTML = "Recived" + event.position + " of " + event.totalSize + " bytes";
           console.log(event.target);
           var percentComplete = Math.round(event.loaded / event.total);
           // 其中的event.loaded表示当前加载了多少字节流,而event.total表示总共有多少字节流 得到这样一个百分比,
           console.log(event.loaded, event.total, 300 * percentComplete);
           progressFn(300 * percentComplete, max);
     }
 }

 xhr.open("get", "progress.php", true);
 xhr.send(null);
 function progressFn(cent,max) {
     if (cent < max) {
         divbar.style.clip = "rect(0px," + cent + "px,60px,0px)";
         divText.innerHTML = Math.ceil((cent / max) * 100) + "%";
      }
 }

PHP代码 为了随便模拟下 随便写一个,当然在实际使用上肯定不是这样的哦!我只是输出一个内容而已;

<?php
    header("Content-Type: text/plain");
    header("Content-Length: 27");
    echo "Some data";
    flush();
    echo "Some data";
    flush();
    echo "Some data";
    flush();
?>

三: CSS3 动画及线性渐变实现进度条demo;

      线性渐变的demo及介绍 可以看这篇博客 http://www.cnblogs.com/lhb25/archive/2013/01/30/css3-linear-gradient.html 这里就不便讲这些了。

HTML代码如下:

<div id="loading-status">
    <div id="process"></div>
</div>

CSS代码如下:

#loading-status {width:300px;border:1px solid #669CB8;-webkit-box-shadow: 0px 2px 2px #D0D4D6; -moz-box-shadow:0px 2px 2px #D0D4D6;border-radius: 10px;height:20px;padding: 1px;}
#process {width: 80%;height: 100%;border-radius: 10px;background: -webkit-gradient(linear, 0 0, 0 100%, from(#7BC3FF), color-stop(0.5,#42A9FF), to(#7BC3FF));-webkit-animation: load 3s ease-out infinite;}
@-webkit-keyframes load {
    0% {
        width: 0%;
    }
    100% {
        width: 80%;
    }
}

效果如下:

由于时间的关系及本人最近心情不好 所以中间难免没有那么详细,所以请见谅,不过大家可以复制代码运行下就可以知道了。

时间: 2024-10-03 13:46:00

Javascript 及 CSS3 实现进度条效果的相关文章

css3圆形进度条

前几天在网上看到了一个css3的进度条,自己想了下.做了一个. 进度条由4层构成,最下面的一层表示初始状态,我用蓝色的圆形div表示,第二层到第四层用来做进度动画用,第二层的圆是由一个宽高都为0的div,加上border和圆角做出来的,初始状态的时候,border的颜色全都是透明,旋转45度.第三层是一个1/4圆,用来旋转用的,当这个圆开始旋转的时候,第二层的圆的border-top-color变成最终的颜色,我用的紫色,当这个圆转到90度的时候,第二层的圆的右边框变为紫色.由于有动画效果,在0

jQuery实现简单进度条效果

一个用jQuery实现的简单进度条,当加载页面时,屏幕顶部出现一条极细的小线条,加载页面时会显示加载进度. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>jquery实现的简单进度条效果</title> 6 <style> 7 #web_loading{ 8 z-inde

可爱!带有数字显示的加载进度条效果插件

可爱!带有数字显示的加载进度条效果插件 有的时候,在我们的应用程序中,我们希望能够显示特定任务的百分比进度.这里分享的这款小巧的 JavaScript 插件就是实现这个功能,易于使用和定制,而且是是免费开源的. 立即下载      在线演示 有的时候,在我们的应用程序中,我们希望能够显示特定任务的百分比进度.这里分享的这款小巧的 JavaScript 插件就是实现这个功能,易于使用和定制,而且是是免费开源的. 关键字:可爱!带有数字显示的加载进度条效果插件 下载地址:https://github

Js效果:图片轮播;选项卡;侧面菜单下拉效果;进度条效果;滑动效果;好友列表选中效果;点击选中显示效果

选项卡效果表: <body><div id="aaa"> <div class="bbb" style="width:50px; height:30px; background-color:#3F0" onclick="Show('d1')">娱乐</div> <div class="bbb" style="width:50px; height

例题 进度条效果、点击图片滑动效果。

进度条效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Co

Android 从无到有打造一个炫酷的进度条效果

从无到有打造一个炫酷的进度条效果

使用定时器实现进度条效果

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style> body{ margin: 0; padding: 0; } header{ width: 1000px; top: 50px; border: 1px solid #000; margin: 0 auto; } div{ width: 1%; heig

Android 中带有进度条效果的按钮(Button)

安卓中带有进度条效果的按钮,如下图: 1.布局文件如下activity_main.xml 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="fill_parent" 4 android:layo

CAShapeLayer实现圆形进度条效果

一.CAShapeLayer简介: 1.CAShapeLayer继承至CALayer,可以使用CALayer的所有属性值 2.CAShapeLayer需要与贝塞尔曲线配合使用才有意义 3.使用CAShapeLayer与贝塞尔曲线可以实现不在view的drawRect方法中画出一些想要的图形 4.CAShapeLayer属于CoreAnimation框架,其动画渲染直接提交到手机的GPU当中,相较于view的drawRect方法使用CPU渲染而言,其效率极高,能大大优化内存使用情况 五角星动画 #