首頁  >  文章  >  web前端  >  CSS3和Javascript實現進度條的效果

CSS3和Javascript實現進度條的效果

不言
不言原創
2018-06-20 14:19:301568瀏覽

本篇文章主要介紹Javascript CSS3實現進度條效果,可以實現給使用者一個等待的過程,有需要的可以了解一下。

進度條在很多web中都能用的到,本文就是介紹了進度條效果,具體程式碼如下:

一: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()的9f43ca36df22477a981e12c69d554f07,1f936ab57d903ce4e3709e40fbd37274指定偏移量是從元素的盒子頂部邊緣算起的,2b67cd4e7cd7d40ec2240b97d7dbf47c,ed64239f284976ac56e20ff01b31b189指定的偏移量是從元素的盒子左邊邊緣算起的。如下:

我們可以再來看一個簡單的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>
<p id="progress-box" class="progress-box">
  <p id="progress-bar" class="progress-bar"></p>
  <p id="progress-text" class="progress-text">0%</p>
</p>

#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個p,一個是元素容器(progress-box)基本上就是想突出邊框,讓用戶知道100%應該是有多長的容量,

第二個progress-bar是表示不斷變化的元素背景色設定為紅色,

第三個是表示進度顯示的數值文字。


為了示範效果,我們需要一個簡單的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個進度事件。

  1. loadstart:在接收到對應資料的第一個位元組時觸發。

  2. progress:在接收對應期間持續不斷觸發。

  3. error:在請求發生錯誤時觸發。

  4. abort:在因為呼叫abort()方法而終止連結時觸發。

  5. load:在接收到完整的對應資料時觸發。

  6. 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>
<p id="progress-box" class="progress-box">
  <p id="progress-bar" class="progress-bar"></p>
  <p id="progress-text" class="progress-text">0%</p>
</p>

與伺服器端互動的程式碼如下:


var pbar = document.getElementById("progress-bar"),
  pText = 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 pStatus = document.getElementById("status");
  if (event.lengthComputable) {
      pStatus.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) {
     pbar.style.clip = "rect(0px," + cent + "px,60px,0px)";
     pText.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;




############################################################################### HTML程式碼如下:############
<p id="loading-status">
  <p id="process"></p>
</p>
#########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%;    
  }
}
####### ##效果如下:###############以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網! ######相關推薦:###

如何以CSS實現帶有陰影效果的黑色導航選單效果

#JS和CSS實現漸進式背景特效的程式碼

############################### ##########################

以上是CSS3和Javascript實現進度條的效果的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn