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 相关文章推荐
js中判断控件是否存在
Aug 25 Javascript
js获取height和width的方法说明
Jan 06 Javascript
给ListBox添加双击事件示例代码
Dec 02 Javascript
在javascript中执行任意html代码的方法示例解读
Dec 25 Javascript
详解AngularJS中自定义过滤器
Dec 28 Javascript
angular-ui-sortable实现可拖拽排序列表
Dec 28 Javascript
学好js,这些js函数概念一定要知道【推荐】
Jan 19 Javascript
Vue.js实现可配置的登录表单代码详解
Mar 29 Javascript
学习JS中的DOM节点以及操作
Apr 30 Javascript
vue监听键盘事件的快捷方法【推荐】
Jul 11 Javascript
js实现删除li标签一行内容
Apr 16 Javascript
javascript实现画板功能
Apr 12 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导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
javascript常用的方法分享
2015/07/01 Javascript
jQuery实现的调整表格行tr上下顺序
2016/01/10 Javascript
js实现楼层导航功能
2017/02/23 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
vue中如何使用ztree
2018/02/06 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
详解JavaScript的变量
2019/04/04 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
Python线程指南详细介绍
2017/01/05 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
Why do we need Unit test
2013/01/03 面试题
中学教师请假制度
2014/02/03 职场文书
合作经营协议书范本
2014/04/17 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
党支部对转正的意见
2015/06/02 职场文书