【问题标题】:How to make a preloader with a gif before the page load?如何在页面加载之前制作带有 gif 的预加载器?
【发布时间】:2017-05-14 07:05:46
【问题描述】:

首先我想告诉你们,我对网页设计非常陌生,所以我正在试验,我真的很想学习如何在页面加载之前创建一个带有 gif 的预加载器。我试过了,但每次它要么不断显示预加载器而不是实际站点,要么根本不显示预加载器。我不确定我是否没有下载某些东西,或者它是我正在使用的记事本++的程序,但我不知道我做错了什么。我按照每个示例进行操作,但没有任何效果。这是我的html文件

<html>
  <head> 
    <meta charset = "uft-8">
    <title>Tester</title>
    <link href =" test.css" type = "text/css" rel = "stylesheet"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script type = "text/javascript"></script>
    <script>
      $(document).ready(function() {
        $(window).load(function() {
          preloaderFadeOutTime = 500; 

          function hidepreloader() {
            var preloader = $('.tester');
            preloader.fadeOut(preloaderFadeOutTime);
          }
          hidepreloader(); 
        });
      });
    </script>
  </head>   
  <body>
    <div class = "tester"></div>
    <div class = "overlay"></div>
    </div>
    <div class = "wrapper">
      <div class = "heading"> 
        <h1> My page</h1>
      </div>
      <div class = "navigation">navigation</div> 
      <div class = " content">main content</div>
      <div class = "sidebar">addition</div> 
      <div class = "footer">this is an experiment</div>
    </div>
  </body> 
</html> 

这是我的 CSS 文件

#tester { 
  height: 100%;
  width: 100%;
  background: rgba(0,0,0,.8);
  position: fixed;
  left: 0;
  top: 0;
}
#overlay {
  position: fixed;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;
  z-index: 9999;
  background: url(../downloads/Giphy.gif) 50% 50% no-repeat rgb(249,249,249);
}
.wrapper {
  background: #000000;
  width: 600px; 
  margin: 0 auto 0 auto;
}
.heading { 
  height: 100px; 
  background: green; 
  text-align:center;
  padding: 20px; 
}
.navigation {
  height: 50px; 
  background: lightgreen; 
}
.content { 
  min-height: 400px; 
  background-image: url(../downloads/test.jpg);
  width: 400px; 
  float: left;
}
.sidebar { 
  width: 200px; 
  float: right;
  background:lightblue; 
  min-height: 400px; 
}
.footer { 
  clear: both; 
  background: black;
  height: 40px; 
  color: white; 
  text-align: center; 
  padding: 10px;
}
h1 { 
  text-align: center; 
  font-family: "times new roman" 
  font: 24pt;
  color: #ff3819;
}

【问题讨论】:

  • 你应该删除单个“

标签: html css


【解决方案1】:

您可以在 HTML 背景中设置下载器 gif 并在页面未完全加载时隐藏正文:

css

body {
  opacity:0;
  transition:0.5s;
} 

JavaScript

window.onload= function() {
  document.body.style.opacity="1"// opacity allows transition
}

切换显示示例

window.onload= function() {
  document.body.style.display="block"
}
html {
  height:100%;
  background:url(https://www.engagewp.com/wp-content/uploads/2014/06/preloader.gif) center no-repeat;
}
img {
  max-width:100%;
}
body {
  background:white;
  display:none;
}
<h1>HTML Ipsum Presents</h1>
let-s use some big image 
<img src="http://lorempixel.com/1200/1500"/> 
<img src="http://lorempixel.com/1200/1501"/> 
<img src="http://lorempixel.com/1200/1502"/>
<p><strong>Pellentesque habitant morbi tristique</strong> senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em> Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, <code>commodo vitae</code>, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>

<h2>Header Level 2</h2>

<img src="http://lorempixel.com/1200/1503"/> 
<img src="http://lorempixel.com/1200/1504"/> 
<img src="http://lorempixel.com/1200/1505"/>
<ol>
   <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
   <li>Aliquam tincidunt mauris eu risus.</li>
</ol>

<blockquote><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.</p></blockquote>

<h3>Header Level 3</h3>

<ul>
   <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
   <li>Aliquam tincidunt mauris eu risus.</li>
</ul>

<pre><code>
#header h1 a {
  display: block;
  width: 300px;
  height: 80px;
}
</code></pre>

或切换内容淡入淡出的不透明度

window.onload= function() {
  document.body.style.opacity="1"
}
html {
  height:100%;
  background:url(https://www.engagewp.com/wp-content/uploads/2014/06/preloader.gif) center no-repeat;
}
img {
  max-width:100%;
}
body {
  background:white;
  opacity:0;
  transition:0.5s
}
<h1>HTML Ipsum Presents</h1>
let-s use some big image 
<img src="http://lorempixel.com/1200/1500"/> 
<img src="http://lorempixel.com/1200/1501"/> 
<img src="http://lorempixel.com/1200/1502"/>
<p><strong>Pellentesque habitant morbi tristique</strong> senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em> Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, <code>commodo vitae</code>, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>

<h2>Header Level 2</h2>

<img src="http://lorempixel.com/1200/1503"/> 
<img src="http://lorempixel.com/1200/1504"/> 
<img src="http://lorempixel.com/1200/1505"/>
<ol>
   <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
   <li>Aliquam tincidunt mauris eu risus.</li>
</ol>

<blockquote><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.</p></blockquote>

<h3>Header Level 3</h3>

<ul>
   <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
   <li>Aliquam tincidunt mauris eu risus.</li>
</ul>

<pre><code>
#header h1 a {
  display: block;
  width: 300px;
  height: 80px;
}
</code></pre>

【讨论】:

    【解决方案2】:

    基本上,您的 html 和 css 乍一看还不错。如果您删除 Javascript,预加载器是否按预期显示?如果是这样,那就是JS的问题。

    您的&lt;script&gt; 标记出现在&lt;head&gt; 之前,因此在定义预加载器的任何标记之前,但这应该不是问题,因为您正在等待$(document).ready()。但是 AFAIK 是在 DOM 准备好时触发的,这并不意味着所有图像和资产也都已下载。在这种情况下,$(window).on('load', function () { … }) 可能会更好。

    另一个可能的情况是:页面加载速度如此之快,以至于您实际上可能看不到预加载器,因为它“立即”被隐藏了。所以为了确保,你可以设置一个超时来延迟,就像这样:

    $(document).ready(function () {
      setTimeout(function () {
        hidePreloader();
      }, 1000); //wait a second
    });
    

    或者,您可以做的另一件事是使用 chrome 开发人员工具,并在网络选项卡中设置网络限制,这样您可能会更好地了解下载时页面的外观很多带宽。我想,您在浏览器中使用的是本地主机,或者只是一个普通的file:///,加载速度非常快。但是,如果您告诉浏览器在加载完所有内容后立即隐藏预加载器,隐藏预加载器,并且页面上只有一个预加载器,它会在可见时被隐藏。

    【讨论】:

      【解决方案3】:

      我建议你:

      1. 将 Gif 图像转换为 base64
      2. 使用完成加载检测器,例如jquerys $(document).load(fn) - 就像你做的那样

      将 Gif 图片转换为 base64 并在 HTML 中实现

      所以,这样做的原因是,这是一种“预加载”图像,对于加载程序,您希望减少延迟。

      转换,您可以使用在线base64转换器,例如http://www.askapache.com/online-tools/base64-image-converter/

      实施,你可以像这篇文章How to display Base64 images in HTML?

      那样实施它
      <div>
          <p>Taken from wikpedia</p>
          <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
      AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
      9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
      </div> 
      

      您也可以将其实现为 CSS -(不推荐用于加载程序)

      li {
        background: url(data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7)
          no-repeat
          left center;
        padding: 5px 0 5px 25px;
          }
      

      来源:https://css-tricks.com/data-uris/

      使用完成加载检测器

      页面使用jQuery(window).load

      $( "#book" ).load(function() {
       // Handler for .load() called.
      });
      

      readyload 之间的差异在此帖子中提出:Detect if page has finished loading

      DOMContentLoaded:当 DOM 准备好被操作时。 jQuery的 捕获此事件的方法是使用 jQuery(document).ready(function () {});。

      OnLoad:当 DOM 和所有资产(包括图像)准备就绪时, iframe、字体等 - 已加载并且纺车/小时 类消失。 jQuery捕获这个事件的方式是上面的 提到了jQuery(window).load。

      另请参阅:http://api.jquery.com/load-event/

      【讨论】:

        猜你喜欢
        • 2013-10-17
        • 1970-01-01
        • 1970-01-01
        • 2014-04-03
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多