2015-11-20 138 views
4

我有一個加載程序,它在頁面加載時加載。我需要顯示完成的百分比。計算和顯示頁面加載進度的百分比

我的應用程序中有很多jquery和css,它還包括一個ajax調用。

截至目前,我已經顯示了頁面加載開始時的進度條,並在ajax成功完成時隱藏它。

另外,我還顯示比例,但它手動使用下面的代碼增加:

function timeout_trigger() { 
    $(".progress").css("max-width", p + "%"); 
    $(".progress-view").text(p + "%"); 
    if (p != 100) { 
     setTimeout('timeout_trigger()', 50); 
    } 
    p++; 
} 
timeout_trigger(); 

這裏的問題是,在進度達到前100,頁面加載和顯示內容,因此裝載機躲在60%之間 - 裝載機被隱藏起來。

我想計算頁面加載完成的百分比(即jquery加載時間,css加載時間等),並相應地增加進度。

請幫助通過這個來獲得..

+1

的[如何顯示正在運行的進度欄頁面加載]可能的複製(http://stackoverflow.com/questions/18981909/how-to-show -a-running-progress-bar-while-page-is-loading) – OddDev

+0

提到這個答案(不被接受,因此南下; P)http://stackoverflow.com/a/22319239/2641361 – OddDev

+0

可能的重複http://stackoverflow.com/questions/11072759/display-a-loading-bar-before-the-entire-page-is-loaded? –

回答

4
function timeout_trigger() { 
    $(".progress").css("max-width",p+"%"); 
    $(".progress-view").text(p+"%"); 
    if(p!=100) { 
     setTimeout('timeout_trigger()', 50); 
    } 
    p++; 
} 
timeout_trigger(); 

當你下載1%每50毫秒,如果下載是快這段代碼只會工作 - 如果將失敗。

它必須是這樣的:

var size = file.getsize(); // file size 

function timeout_trigger() { 
    var loaded = file.getLoaded(); // loaded part 
    p = parseInt(loaded/size); 

    $(".progress").css("max-width",p+"%"); 
    $(".progress-view").text(p+"%"); 
    if(p!=100) { 
     setTimeout('timeout_trigger()', 20); 
    } 
} 
timeout_trigger(); 

爲了實現方法getLoaded()你可以使用AJAX事件onprogress(我希望你加載文件異步)。檢查監測進展一部分這裏https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

+0

我應該知道'file.getsize()'中的'文件'是什麼。我有很多的Js和CSS文件..我應該如何獲得文件大小? – user3211705

+0

這不是一種非標準的方法,它必須被實現,它只是一個例子給你,你的任務是如何完成的。請先閱讀**監測進度**,然後才能瞭解泰姆。 –

+0

感謝您的鏈接.. – user3211705

2

您可以使用此:

來源:Display a loading bar before the entire page is loaded

腳本

<script> 
     ;(function(){ 
      function id(v){ return document.getElementById(v); } 
      function loadbar() { 
      var ovrl = id("overlay"), 
       prog = id("progress"), 
       stat = id("progstat"), 
       img = document.images, 
       c = 0, 
       tot = img.length; 
      if(tot == 0) return doneLoading(); 

      function imgLoaded(){ 
       c += 1; 
       var perc = ((100/tot*c) << 0) +"%"; 
       prog.style.width = perc; 
       stat.innerHTML = "Loading "+ perc; 
       if(c===tot) return doneLoading(); 
      } 
      function doneLoading(){ 
       ovrl.style.opacity = 0; 
       setTimeout(function(){ 
       ovrl.style.display = "none"; 
       }, 1200); 
      } 
      for(var i=0; i<tot; i++) { 
       var tImg  = new Image(); 
       tImg.onload = imgLoaded; 
       tImg.onerror = imgLoaded; 
       tImg.src  = img[i].src; 
      }  
      } 
      document.addEventListener('DOMContentLoaded', loadbar, false); 
     }()); 
    </script> 

HTML(在在身體或啓動結束)

<div id="overlay"> 
      <div id="progstat"></div> 
      <div id="progress"></div> 
     </div> 

CSS

#overlay{ 
    position:fixed; 
    z-index:99999; 
    top:0; 
    left:0; 
    bottom:0; 
    right:0; 
    background:rgba(0,0,0,0.9); 
    transition: 1s 0.4s; 
} 
#progress{ 
    height:1px; 
    background:#fff; 
    position:absolute; 
    width:0; 
    top:50%; 
    transition: 1s; 
} 
#progstat{ 
    font-size:0.7em; 
    letter-spacing: 3px; 
    position:absolute; 
    top:50%; 
    margin-top:-40px; 
    width:100%; 
    text-align:center; 
    color:#fff; 
} 
+0

@downvoter:我可以知道投票的原因嗎? –

+0

這裏的文件加載進度在哪裏? –

+0

該代碼將在網站上填充覆蓋圖,網站的整個內容將會有一個進度條,當網站完成加載時,這將會消失。你可以在這裏看到一個工作示例:http://hestawork.com/playfer/public/home –