如何在页面加载之前使用gif制作预加载器?

时间:2017-05-14 07:05:47

标签: html css css3

我首先想告诉大家,我对网页设计非常陌生,所以我正在尝试,我真的想学习如何在页面加载之前用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;
}

3 个答案:

答案 0 :(得分:1)

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

css

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

的JavaScript

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

示例切换显示

&#13;
&#13;
window.onload= function() {
  document.body.style.display="block"
}
&#13;
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;
}
&#13;
<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>
&#13;
&#13;
&#13;

或切换内容淡化的不透明度

&#13;
&#13;
window.onload= function() {
  document.body.style.opacity="1"
}
&#13;
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
}
&#13;
<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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

基本上你的html和css乍一看看起来很好。如果删除Javascript,预加载器是否按预期显示?如果是这样,那就是JS问题。

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

可能出现的另一种情况是:页面加载速度太快,以至于您可能实际上看不到预加载器,因为它会立即被隐藏«。所以为了确保,你可以设置一个Timeout来延迟它,如下所示:

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

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

答案 2 :(得分:0)

我建议你:

  1. 将Gif图像转换为base64
  2. 使用完成加载检测器,例如jquerys $(document).load(fn) - 正如你所做的那样
  3. 将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/