JavaScript百分比動態進度條

antzone發表於2018-07-08

本章節分享一段程式碼例項,它實現了百分比動態進度條效果,實際應用通常需要和後臺配合使用。

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style>
#progressBox{ 
  width: 300px; 
  height: 40px; 
  border: 1px solid #c8c8c8; 
  background: white;
  position: relative;
}
#progressBar{ 
  position: absolute;
  left: 0;
  top: 0;
  z-index: 2;
  height: 40px; 
  width: 100%; 
  line-height: 40px; 
  color: white; 
  text-align: center; 
  font-size: 20px; 
  font-weight: bold;
  font-family: Georgia; 
  clip: rect(0px,0px,40px,0px); 
  background: #00A1F5;
}
#progressText{
  position: absolute;
  left: 0;
  top: 0;
  z-index: 1;
  width: 100%; 
  height: 40px; 
  line-height: 40px; 
  color: black; 
  text-align: center;
  font-size: 20px;
  font-weight: bold;
  font-family: Georgia;
}
</style>
<script>
window.onload = function () {
  var iNow = 0;
  var timer = setInterval(function (argument) {
    if (iNow == 100) {
      clearInterval(timer);
    } else {
      iNow += 1;
      progressFn(iNow);
    }
 
  }, 30);
 
  function progressFn(cent) {
    var oDiv1 = document.getElementById('progressBox');
    var oDiv2 = document.getElementById('progressBar');
    var oDiv3 = document.getElementById('progressText');
 
    var allWidth = parseInt(getStyle(oDiv1, 'width'));
 
    oDiv2.innerHTML = cent + '%';
    oDiv3.innerHTML = cent + '%';
    oDiv2.style.clip = 'rect(0px,' + cent / 100 * allWidth + 'px,40px,0px)';
 
    function getStyle(obj, attr) {
      if (obj.currentStyle) {
        return obj.currentStyle[attr];
      }
      else {
        return getComputedStyle(obj, false)[attr];
      }
    }
  }
}       
</script>
</head>
<body>
  <div id="progressBox">
    <div id="progressBar">0%</div>
    <div id="progressText">0%</div>
  </div>
</body>
</html>

上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。

一.程式碼註釋:

(1).window.onload = function () {},當文件內容完全載入完畢再去執行函式中的程式碼。

(2).var iNow = 0,宣告一個變數並賦值為0,用來作為百分比的數字。

(3).var timer = setInterval(function (argument) {

  if (iNow == 100) {

    clearInterval(timer);

  } else {

    iNow += 1;

    progressFn(iNow);

  }

}, 30),一個定時器函式,每隔30毫秒執行一次指定函式。

如果iNow值等於100,那麼就停止定時器函式的執行。

否則的話iNow值每次加1,並且呼叫progressFn(),從而實現動態百分比效果。

(4).function progressFn(cent) {},引數是一個數字。

(5).var oDiv1 = document.getElementById('progressBox');

var oDiv2 = document.getElementById('progressBar');

var oDiv3 = document.getElementById('progressText');

獲取三個元素物件。

(6).var allWidth = parseInt(getStyle(oDiv1, 'width')),獲取元素的width值。

(7).oDiv2.innerHTML = cent + '%',設定元素的內容,就是那個動態的百分比數字。

(8).oDiv3.innerHTML = cent + '%',之所以有和上面這麼重複的一步,是因為,剛開始progressBar元素的寬度是0,沒有覆蓋progressText元素,但是隨著progressBar元素寬度的增加,最終會覆蓋掉progressText元素顯示的百分比數字,兩個同時設定就能保證無論何時都能夠完整顯示百分比數字。

(9).oDiv2.style.clip = 'rect(0px,' + cent / 100 * allWidth + 'px,40px,0px)',動態設定元素的click屬性值。

(10).function getStyle(obj, attr) {},此方法可以獲取元素指定的樣式屬性值。

二.相關閱讀:

(1).setInterval()參閱setInterval()一章節。

(2).clearInterval()參閱clearInterval()一章節。

(3).parseInt()參閱javascript parseInt()一章節。

(4). innerHTML參閱innerHTML一章節。

(5).clip屬性參閱CSS3 clip一章節。

(6).getStyle()參閱js如何獲取非內部取樣式表中定義的屬性值一章節。

相關文章