js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果

所属分类: 网络编程 / JavaScript 阅读数: 419
收藏 0 赞 0 分享

 本文为大家分享了js实现延迟加载思想和首屏延迟加载的具体代码,供大家参考,具体内容如下

作用:保证页面打开的速度(3s之内如果首页打不开就已经算是死亡页面了)

原理:

  1)、对于首屏内容中的图片:首先给对应的区域一张默认图片占的位置(默认图需要非常的小,一般可以维持在5kb以内),当首屏内容都加载完成后(或者也可以给一个延迟的时间),我在开始加载真实的图片

  2)、对于其他屏中的图片:也是给一张默认的图片占位,当滚动条滚动到对应区域的时候,我们再开始加载真实的图片

  扩展:数据的异步加载,开始只把前两屏的数据加载绑定出来,后面的数据不进行处理,当页面滚动到对应区域的时候,在重新请求数据绑定渲染数据

具体可以看一下下图

首屏的延迟加载代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    *{
      padding:0;
      margin:0;
      font-size:14px;
    }
    #banner{
      margin:10px auto;
      width:300px;
      height:150px;
      border:1px solid green;
      background:url('img/default.gif') no-repeat center center;/*给当前的区域加一个默认图占位,告诉用户此处的图片正在加载中*/
    }
    #banner img{
      display:none;/*在开始的时候IMG的SRC属性没有地址,这样的话在IE浏览器中会显示一张碎图,不美观,所以我们让其默认是隐藏的,当真实的图片加载完成后在显示*/
      width:100%;
      height:100%;
    }
  </style>
</head>
<body>
  <div id='banner'>
    <!--trueImg是当前标签的自定义属性,存储的是真实图片的地址-->
    <img src="" alt="" trueImg="img/jd.jpg">
  </div>
  <script>
    var banner = document.getElementById('banner'),imgFir = banner.getElementsByTagName('img')[0]
    window.setTimeout(function(){
      // imgFir.src = imgFir.getAttribute('trueImg');
      // imgFir.style.display = "block"
      //以上处理还是不完整的:如果我们获取的真实图片的地址是错误的,赋值给IMG的SRC属性的时候,不仅控制台会报错,而且页面中还会出现碎图
      //获取图片的地址,验证地址的有效性,是有效的才赋值,不是有效的是不进行处理的
      // var oImg = document.createElement('img')
      var oImg = new Image;//创建一个临时的IMG标签
      oImg.src = imgFir.getAttribute('trueImg');
      oImg.onload = function(){//当图片能够正常加载
        imgFir.src = this.src;
        imgFir.style.display = "block";
        oImg = null
        console.log('加载完成')
      }
      console.log('正在加载中...')
    },500)
  </script>
</body>
</html>

多屏单张图片的延迟加载

具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    *{
      padding:0;
      margin:0;
      font-size:14px;
    }
    #banner{
      margin:10px auto;
      width:300px;
      height:150px;
      border:1px solid green;
      background:url('img/default.gif') no-repeat center center;/*给当前的区域加一个默认图占位,告诉用户此处的图片正在加载中*/
    }
    #banner img{
      display:none;/*在开始的时候IMG的SRC属性没有地址,这样的话在IE浏览器中会显示一张碎图,不美观,所以我们让其默认是隐藏的,当真实的图片加载完成后在显示*/
      width:100%;
      height:100%;
    }
  </style>
</head>
<body>
  <div id='banner'>
    <!--trueImg是当前标签的自定义属性,存储的是真实图片的地址-->
    <img src="" alt="" trueImg="img/jd.jpg">
  </div>
  <script>
    var banner = document.getElementById('banner'),imgFir = banner.getElementsByTagName('img')[0]

    window.onscroll = function(){
      if(banner.isLoad){
        return;
      }
      var A = banner.offsetHeight+utils.offset(banner).top;
      var B = utils.win("clientHeight") + utils.win("scrollTop");
      if(A<B){
        //当条件成立,我们加载真实的图片,第一次加载完成后,我们在让页面滚动的过程中A<B一直成立,又重新执行下面的操作,导致了重复给一个容器中的图片进行加载
        var oImg = new Image;
        oImg.src = imgFir.getAttribute('trueImg');
        oImg.onload = function(){
          imgFir.src = this.src;
          imgFir.style.display = 'block';
          oImg = null;
          
        }
        banner.isLoad = true;//设置一个自定义属性告诉浏览器我已经把图片加载完了(不管是否正常的加载,只要处理过一次以后都不需要处理了)

      }
    }
  </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

浅谈Koa2框架利用CORS完成跨域ajax请求

这篇文章主要介绍了浅谈Koa2框架利用CORS完成跨域ajax请求,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅析Vue中method与computed的区别

在new Vue的配置参数中的computed和methods都可以处理大量的逻辑代码,但是什么时候用哪个属性,要好好区分一下才能做到正确的运用vue。这篇文章主要介绍了Vue中method与computed的区别,需要的朋友可以参考下
收藏 0 赞 0 分享

Vue2.0 http请求以及loading展示实例

下面小编就为大家分享一篇Vue2.0 http请求以及loading展示实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

轻松搞定jQuery+JSONP跨域请求的解决方案

了解了jsonp之后,大家应该也都明白了,jsonp主要就是用来实现跨域的获取数据,今天我们就来详细探讨下如何在实际中应用jsonp实现跨域
收藏 0 赞 0 分享

Vue2.0实现组件数据的双向绑定问题

这篇文章主要介绍了Vue2.0实现组件数据的双向绑定问题,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

node的process以及child_process模块学习笔记

这篇文章主要介绍了node的process以及child_process模块学习笔记,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

vue2.0 循环遍历加载不同图片的方法

下面小编就为大家分享一篇vue2.0 循环遍历加载不同图片的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈Vue2.0中v-for迭代语法的变化(key、index)

下面小编就为大家分享一篇浅谈Vue2.0中v-for迭代语法的变化(key、index),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

使用vue-aplayer插件时出现的问题的解决

这篇文章主要介绍了使用vue-aplayer插件时出现的问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Element-ui table中过滤条件变更表格内容的方法

下面小编就为大家分享一篇Element-ui table中过滤条件变更表格内容的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多