【问题标题】:Calculate & Display percentage of progress of page load计算并显示页面加载进度百分比
【发布时间】:2016-02-22 14:30:01
【问题描述】:

我有一个加载器,它在页面开始加载时加载。我需要在其中显示完成百分比。

我的应用程序包含很多 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加载时间等)并相应增加进度。

请帮助解决这个问题..

【问题讨论】:

标签: javascript jquery html css ajax


【解决方案1】:

你可以用这个:

来源: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;
}

【讨论】:

  • 这里的文件加载进度在哪里?
  • 该代码将在站点上填充一个叠加层,并且站点的全部内容都会有一个进度条,当站点完成加载时它将淡出。你可以在这里看到一个工作示例:hestawork.com/playfer/public/home
  • @Roko C. 它可能是从那里复制的,因为我大约一年前在我的项目中使用过它,所以我不记得我从哪里得到这个代码,所以我只是提供了我用过的代码。我已经分享了我的项目的链接,它是在其中实现的。
  • 我已经用那个答案的链接更新了答案
【解决方案2】:
function timeout_trigger() {
   $(".progress").css("max-width",p+"%");
   $(".progress-view").text(p+"%");
   if(p!=100) {
       setTimeout('timeout_trigger()', 50);
   }
   p++;
}
timeout_trigger();

此代码仅在您每 50 毫秒下载 1% 时才有效,如果下载速度更快 - 如果会失败。

一定是这样的:

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

【讨论】:

  • 我应该知道'file.getsize()'中的'file'是什么。我有很多 Js 和 css 文件。我应该如何获取文件大小??
  • 这不是标准的方法,必须意识到,这只是给你的一个例子,你的任务是如何完成的。首先阅读监控进度,然后再了解它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 2010-11-22
  • 1970-01-01
  • 2014-08-14
相关资源
最近更新 更多