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,mootools,dojo)使用适合自己的编程别名命名
Sep 14 Javascript
ExtJS 入门
Oct 29 Javascript
Node.js编程中客户端Session的使用详解
Jun 23 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
Dec 16 Javascript
jQuery判断checkbox选中状态
May 12 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
微信小程序 http请求的session管理
Jun 07 Javascript
ztree简介_动力节点Java学院整理
Jul 19 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
May 04 Javascript
bootstrap与pagehelper实现分页效果
Dec 29 Javascript
微信小程序使用npm包的方法步骤
Aug 13 Javascript
vue-form表单验证是否为空值的实例详解
Oct 29 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开发过程中常用函数收藏
2009/12/14 PHP
phpMyadmin 用户权限中英对照
2010/04/02 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
Python实现简单字典树的方法
2016/04/29 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
简单了解python中对象的取反运算符
2019/07/01 Python
python 弧度与角度互转实例
2020/04/15 Python
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
应用艺术专业个人的自我评价
2014/01/03 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
客房领班岗位职责
2015/02/11 职场文书
MySQL系列之六 用户与授权
2021/07/02 MySQL
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL