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 相关文章推荐
ext 同步和异步示例代码
Sep 18 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
Jan 09 Javascript
Jquery同辈元素选中/未选中效果的实例代码
Aug 01 Javascript
JS定时器实例详细分析
Oct 11 Javascript
js修改原型的属性使用介绍
Jan 26 Javascript
JavaScript中双叹号(!!)作用示例介绍
Apr 10 Javascript
javascript与css3动画结合使用小结
Mar 11 Javascript
jQuery实现监控页面所有ajax请求的方法
Dec 10 Javascript
解决npm管理员身份install时出现权限的问题
Mar 16 Javascript
vue 中引用gojs绘制E-R图的方法示例
Aug 24 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
Aug 13 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
Mar 10 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
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
从面试题学习Javascript 面向对象(创建对象)
2012/03/30 Javascript
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
Python中Threading用法详解
2017/12/27 Python
Python KMeans聚类问题分析
2018/02/23 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
python实现门限回归方式
2020/02/29 Python
django 模型中的计算字段实例
2020/05/19 Python
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
中医专业职业生涯规划书范文
2014/01/04 职场文书
保研推荐信格式
2015/03/25 职场文书
商标侵权律师函
2015/05/27 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
Go语言应该什么情况使用指针
2021/07/25 Golang