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


Posted in Javascript onJuly 17, 2017

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

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

原理:

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

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

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

具体可以看一下下图

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

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

<!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>

多屏单张图片的延迟加载

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

具体代码如下:

<!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>

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

Javascript 相关文章推荐
读jQuery之六 缓存数据功能介绍
Jun 21 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
Sep 19 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
Mar 26 Javascript
jquery图片滚动放大代码分享(1)
Aug 25 Javascript
jquery实现的判断倒计时是否结束代码
Feb 05 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
Jul 08 Javascript
详解VUE的状态控制与延时加载刷新
Mar 27 Javascript
vue中七牛插件使用的实例代码
Jul 28 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
May 15 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
Feb 01 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
Oct 16 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 Javascript
node.js中grunt和gulp的区别详解
Jul 17 #Javascript
js实现多张图片延迟加载效果
Jul 17 #Javascript
js指定步长实现单方向匀速运动
Jul 17 #Javascript
webpack构建vue项目的详细教程(配置篇)
Jul 17 #Javascript
javascript 跨域问题以及解决办法
Jul 17 #Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
Jul 17 #Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
Jul 17 #Javascript
You might like
自定义PHP分页函数
2006/10/09 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
Python中的map、reduce和filter浅析
2014/04/26 Python
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
酒店总经理工作职责
2013/12/13 职场文书
大型公益活动策划方案
2014/08/20 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python