js实现多张图片延迟加载效果


Posted in Javascript onJuly 17, 2017

本文实例为大家分享了js实现多张图片延迟加载效果的具体代码,供大家参考,具体内容如下

具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <!--做移动端响应式必须加的样式-->
  <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
  <title>Document</title>
  <style>
    *{
      margin:0;
      padding:0;
      font-size:14px;
    }
    ul,li{
      list-style:none;
    }
    img{
      display:block;
      border:none;
    }
    /*
      最外层容器不设定宽高的
    */
    .news{
      padding:10px;
    }
    .news li{
      height:60px;
      padding:10px 0;
      border-bottom:1px solid #dedede;
      position:relative;
    }
    .news li > div:nth-child(1){
      position:absolute;
      top:10px;
      left:0;
      width:75px;
      height:60px;
      background:url('img/default.png') no-repeat center center;
      background-size:100% 100%;/*设置背景图片大小*/
    }
    .news li > div:nth-child(1) img{
      width:100%;
      height:100%;
      display:none;
      opacity:0;
    }
    .news li > div:nth-child(2){
      height:60px;
      margin-left:80px;
    }
    .news li > div:nth-child(2) h2{
      height:20px;
      line-height:20px;
      /*实现文字超出隐藏*/
      overflow:hidden;
      text-overflow:ellipsis;
      white-space: nowrap;
    }
    .news li > div:nth-child(2) p{
      line-height:20px;
      font-size:12px;
      color:#ccc;
    }
  </style>
</head>
<body>
  <ul id='news' class='news'>
    <li>
      <div>
        <img src="" alt="">
      </div>
      <div>
        <h2>我是一个标题</h2>
        <p>我是内容</p>
      </div>
    </li>
  </ul>

  <script>
    var news = document.getElementById('news')
    var imgList = news.getElementsByTagName('img')
    //1、获取需要绑定的数据(Ajax)
    var jsonData = null;
    ~function(){
      var xhr = new XMLHttpRequest();
      //URL地址后面加的随机数是在清除每一次请求数据时候(GET请求)产生的缓存
      xhr.open('GET','data.json?_='+Math.random(),false)
      xhr.onreadystatechange = function(){
        if(xhr.readystate ===4 && /^2\d{2}$/.test(xhr.status)){
          var val = xhr.responseText;
          jsonData = utils.formatJSON(val)
        }
      }
      xhr.send(null)
    }()
    //2、数据绑定->把jsonData存储的数据绑定到页面中(字符串拼接)
    ~function(){
      var str = '';
      if(jsonData){
        for(var i = 0,len = jsonData.length;i<len;i++){
          var curData = jsonData[i]
          str+='<li>';
          str+='<div><img src="" trueImg="'+curData['img']+'"></div>';
          str+='<div>';
          str+='<h2>'+curData['title']+'</h2>';
          str+='<p>'+curData['desc']+'</p>';
          str+='</div>';
          str+='</li>';
        }
      }
      news.innerHTML = str;
    }()
    //3、图片延迟加载
    //我先编写一个方法实现单张图片的延迟加载
    function lazyImg(curImg){
      var oImg = new Image;
      oImg.src = curImg.getAttribute('trueImg');
      oImg.onload = function(){
        curImg.src = this.src;
        curImg.style.display = "block";
        fadeIn(curImg)
        oImg = null
      };
      curImg.isLoad = true;
    }

    function fadeIn(curImg){
      var duration = 500,interval = 10,target = 1;
      var step = (target/duration)*interval;
      var timer = window.setInterval(function(){
        var curOP = utils.getCss(curImg,'opacity');
        if(curOP>1){
          curImg.style.opacity = 1;
          window.clearInterval(timer)
          return
        }
        curOP+=step;
        curImg.style.opacity = curOP;
      },interval)

    }

    function handleAllImage(){
      for(var i = 0,len = imgList.length;i<len;i++){
        var curImg = imgList[i];
        //当前的图片处理过了就不需要在重新的进行处理了
        if(curImg.isLoad = true){
          continue;
        }
        //只有A小于B的时候才进行处理,当前图片是隐藏的,我们其实计算的是它父节点的A
        var curImgPar = curImg.parentNode;
        var A = utils.offset(curImgPar).top + curImgPar.offsetHeight;
        var B = utils.win('clientHeight')+utils.win('scrollTop');
        if(A<B){
          lazyImg(curImg);
        }
      }
    }

    //4、开始的时候一秒加载第一屏的图片,当滚动条滚动的时候,再加载剩余的图片
    window.setTimeout(handleAllImage,1000);
    window.onscroll = handleAllImage;
  </script>
</body>
</html>

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

Javascript 相关文章推荐
基于jquery实现漂亮的动态信息提示效果
Aug 02 Javascript
Javascript中的delete介绍
Sep 02 Javascript
JavaScript实现GriwView单列全选(自写代码)
May 13 Javascript
JavaScript中合并数组的N种方法
Sep 16 Javascript
JavaScript引用类型和基本类型详解
Jan 06 Javascript
AngularJS入门教程之服务(Service)
Jul 27 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
Nov 05 Javascript
仿淘宝JSsearch搜索下拉深度用法
Jan 15 Javascript
如何从零开始利用js手写一个Promise库详解
Apr 19 Javascript
微信小程序 Animation实现图片旋转动画示例
Aug 22 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
Nov 29 Javascript
js 数组 fill() 填充方法
Nov 02 Javascript
js指定步长实现单方向匀速运动
Jul 17 #Javascript
webpack构建vue项目的详细教程(配置篇)
Jul 17 #Javascript
javascript 跨域问题以及解决办法
Jul 17 #Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
Jul 17 #Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
Jul 17 #Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
Jul 17 #Javascript
js学使用setTimeout实现轮循动画
Jul 17 #Javascript
You might like
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
VsCode与Node.js知识点详解
2019/09/05 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
python从sqlite读取并显示数据的方法
2015/05/08 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
python文件和文件夹复制函数
2020/02/07 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
会计系中文个人求职信
2013/12/24 职场文书
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
离婚协议书格式
2014/11/21 职场文书
详细介绍python类及类的用法
2021/05/31 Python
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android