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 相关文章推荐
JavaScript类和继承 prototype属性
Sep 03 Javascript
JQuery获取文本框中字符长度的代码
Sep 29 Javascript
中国地区三级联动下拉菜单效果分析
Nov 15 Javascript
基于JavaScript实现一定时间后去执行一个函数
Dec 14 Javascript
js实现的xml对象转json功能示例
Dec 24 Javascript
JavaScript中数组的各种操作的总结(必看篇)
Feb 13 Javascript
javascript html5轻松实现拖动功能
Mar 01 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
Mar 21 jQuery
vue中如何让子组件修改父组件数据
Jun 14 Javascript
小程序实现抽奖动画
Apr 16 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
Mar 26 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
May 31 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使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
javascript 有用的脚本函数
2009/05/07 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
ECMAScript6轮播图实践知识总结
2016/08/17 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
最基础的Python的socket编程入门教程
2015/04/23 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
python 换位密码算法的实例详解
2017/07/19 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
Python 实现数组相减示例
2019/12/27 Python
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
2014年银行个人工作总结
2014/12/05 职场文书
心灵点滴观后感
2015/06/02 职场文书
刮痧观后感
2015/06/05 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android