首頁 web前端 css教學 CSS3和Javascript實現進度條的效果

CSS3和Javascript實現進度條的效果

Jun 20, 2018 pm 02:19 PM

本篇文章主要介紹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()的,指定偏移量是從元素的盒子頂部邊緣算起的,指定的偏移量是從元素的盒子左邊邊緣算起的。如下:

我們可以再來看一個簡單的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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue團隊完成了完成,我知道這是一項巨大的努力,而且很長時間。所有新文檔也是如此。

使用Redwood.js和Fauna構建以太坊應用 使用Redwood.js和Fauna構建以太坊應用 Mar 28, 2025 am 09:18 AM

隨著最近比特幣價格超過20k美元的攀升,最近打破了3萬美元,我認為值得深入研究創建以太坊

您可以從瀏覽器獲得有效的CSS屬性值嗎? 您可以從瀏覽器獲得有效的CSS屬性值嗎? Apr 02, 2025 pm 06:17 PM

我有人寫了這個非常合法的問題。 Lea只是在博客上介紹瞭如何從瀏覽器中獲得有效的CSS屬性。那樣的是這樣。

帶有粘性定位的堆疊卡和一點點的雜物 帶有粘性定位的堆疊卡和一點點的雜物 Apr 03, 2025 am 10:30 AM

前幾天,我發現了科里·金尼文(Corey Ginnivan)網站上的這一點,當您滾動時,彼此之間的卡片堆放集。

在CI/CD上有點 在CI/CD上有點 Apr 02, 2025 pm 06:21 PM

我說的“網站”比“移動應用程序”更合適,但我喜歡Max Lynch的框架:

比較瀏覽器的響應式設計 比較瀏覽器的響應式設計 Apr 02, 2025 pm 06:25 PM

這些桌面應用程序中有許多目標是同時在不同的維度上顯示您的網站。因此,例如,您可以寫作

在WordPress塊編輯器中使用Markdown和本地化 在WordPress塊編輯器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我們需要直接在WordPress編輯器中向用戶顯示文檔,那麼最佳方法是什麼?

為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? 為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? Apr 05, 2025 pm 05:51 PM

關於Flex佈局中紫色斜線區域的疑問在使用Flex佈局時,你可能會遇到一些令人困惑的現象,比如在開發者工具(d...

See all articles