在加载整个页面之前显示加载栏

IT技术 javascript jquery progress-bar loading
2021-03-15 23:01:39

我想在加载整个页面之前显示一个加载栏。现在,我只是使用一个小的延迟:

$(document).ready(function(){
    $('#page').fadeIn(2000);
});

该页面已经使用 jQuery。

注意:我已经尝试过这个,但它对我不起作用:脚本运行时加载栏

我也尝试了其他解决方案。在大多数情况下,页面会像往常一样加载,或者页面根本不会加载/显示。

5个回答

使用#overlay带有加载信息 / .gif的 div来覆盖所有页面:

<div id="overlay">
     <img src="loading.gif" alt="Loading" />
     Loading...
</div>

jQuery:

$(window).load(function(){
   // PAGE IS FULLY LOADED  
   // FADE OUT YOUR OVERLAYING DIV
   $('#overlay').fadeOut();
});

这是一个带有加载栏的示例

jsBin 演示

;(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);
}());
*{margin:0;}
body{ font: 200 16px/1 sans-serif; }
img{ width:32.2%; }

#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;                /* will be increased by JS */
  top:50%;
}
#progstat{
  font-size:0.7em;
  letter-spacing: 3px;
  position:absolute;
  top:50%;
  margin-top:-40px;
  width:100%;
  text-align:center;
  color:#fff;
}
<div id="overlay">
  <div id="progstat"></div>
  <div id="progress"></div>
</div>

<div id="container">
  <img src="http://placehold.it/3000x3000/cf5">
</div>

你确定没有“副作用”吗?我记得 .load() 不是在等待某些元素,例如页面中所有图像的满载。编辑:我记不太清了,它不应该有任何副作用,这里是一个解释为什么
2021-04-17 23:01:39
奇怪的问题,有很多观点,但没有人对有用的答案点赞
2021-04-26 23:01:39
@roko 如何在第一页完全加载之前显示加载 gif?我有一个视差网站,我只想在我的第一个页面完全加载之前显示加载。
2021-05-01 23:01:39
@arandompenguin 如果您在开始时使用脚本加载图像应该可以解决您的问题。
2021-05-06 23:01:39
我意识到这个答案有点旧,但我想知道如果用户禁用了 javascript,是否有一个可以很好地降级的解决方案?因为目前他们最终会得到一个网站的加载 gif。
2021-05-13 23:01:39

HTML

<div class="preload">
<img src="http://i.imgur.com/KUJoe.gif">
</div>

<div class="content">
I would like to display a loading bar before the entire page is loaded. 
</div>

Java脚本

$(function() {
    $(".preload").fadeOut(2000, function() {
        $(".content").fadeIn(1000);        
    });
});​

CSS

.content {display:none;}
.preload { 
    width:100px;
    height: 100px;
    position: fixed;
    top: 50%;
    left: 50%;
}
​

演示

加载器也没有完全显示在页面的中心。请对此也提供帮助。
2021-04-17 23:01:39
页面加载时是否可以设置白色背景的不透明度?目前它在页面加载期间显示白色背景和加载程序。我想在加载过程中显示透明内容。请告诉我。
2021-04-25 23:01:39

每当您尝试在此窗口中加载任何数据时,都会加载此 gif。

HTML

制作一个 Div

<div class="loader"></div>

CSS

.loader {
    position: fixed;
    left: 0px;
    top: 0px;
    width: 100%;
    height: 100%;
    z-index: 9999;
    background: url('https://lkp.dispendik.surabaya.go.id/assets/loading.gif') 50% 50% no-repeat rgb(249,249,249);

jQuery

$(window).load(function() {
        $(".loader").fadeOut("slow");
});
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>

在此处输入图片说明

最好和最简单的解决方案。
2021-04-28 23:01:39
使用 (".loader").show(); 和 (".loader").hide(); 用于启动和停止
2021-05-03 23:01:39
如何在特定时间后停止装载机?目前它并没有一直停止和显示。
2021-05-11 23:01:39
同样的问题。它永远循环,无法停止。
2021-05-15 23:01:39

我最近.js为一个项目用香草制作了一个页面加载器,只是想分享它,因为所有其他答案都是基于 jQuery 的。它是即插即用的单线。

它会自动创建一个带有加载程序<div>标记,该标记<body>位于 之前<svg>如果要自定义颜色,只需t在脚本开头更新变量即可。

var t="#106CF6",u=document.querySelector("*"),s=document.createElement("style"),a=document.createElement("aside"),m="http://www.w3.org/2000/svg",g=document.createElementNS(m,"svg"),c=document.createElementNS(m,"circle");document.head.appendChild(s),(s.innerHTML="#sailor {background:"+t+";color:"+t+";display:flex;align-items:center;justify-content:center;position:fixed;top:0;height:100vh;width:100vw;z-index:2147483647}@keyframes swell{to{transform:rotate(360deg)}}#sailor svg{animation:.3s swell infinite linear}"),a.setAttribute("id","sailor"),document.body.prepend(a),g.setAttribute("height","50"),g.setAttribute("filter","brightness(175%)"),g.setAttribute("viewBox","0 0 100 100"),a.prepend(g),c.setAttribute("cx","50"),c.setAttribute("cy","50"),c.setAttribute("r","35"),c.setAttribute("fill","none"),c.setAttribute("stroke","currentColor"),c.setAttribute("stroke-dasharray","165 57"),c.setAttribute("stroke-width","10"),g.prepend(c),(u.style.pointerEvents="none"),(u.style.userSelect="none"),(u.style.cursor="wait"),window.addEventListener("load",function(){setTimeout(function(){(u.style.pointerEvents=""),(u.style.userSelect=""),(u.style.cursor="");a.remove()},100)})

您可以在 GitHub 上查看完整的项目和文档

语义 UI 也可能有所帮助,只需一个简单的衬里即可显示和隐藏加载图标。

例如: <div class="ui active centered inline loader"></div>

来源:https : //semantic-ui.com/elements/loader.html

找到了一个代码示例:https : //codepen.io/fujiyamayuta/pen/JBxxJO

虽然,上面代码示例的 JS 文件中有一个小错字,更正后如下所示:

// ** Loader ON
$('#dimmer').dimmer('show');

// ** Loader OFF
// $('#dimmer').dimmer('hide');