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 相关文章推荐
javascript 动态参数判空操作
Dec 22 Javascript
ie focus bug 解决方法
Sep 03 Javascript
js 处理URL实用技巧
Nov 23 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
Jul 26 Javascript
深入理解javaScript中的事件驱动
May 21 Javascript
javascript制作幻灯片(360度全景图片)
Jul 28 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
Dec 29 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
Dec 19 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
Jun 22 Javascript
JS实现的input选择图片本地预览功能示例
Aug 29 Javascript
JavaScript根据json生成html表格的示例代码
Oct 24 Javascript
微信小程序修改数组长度的问题的解决
Dec 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
详解Vue学习笔记进阶篇之列表过渡及其他
Jul 17 #Javascript
js学使用setTimeout实现轮循动画
Jul 17 #Javascript
You might like
PHP三元运算的2种写法代码实例
2014/05/12 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
php源码的使用方法讲解
2019/09/26 PHP
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
微信小程序仿朋友圈发布动态功能
2018/07/15 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Django 中自定义 Admin 样式与功能的实现方法
2019/07/04 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
知识改变命运演讲稿
2014/05/21 职场文书
2014高考励志标语
2014/06/05 职场文书
狮子林导游词
2015/02/03 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
Golang 入门 之url 包
2022/05/04 Golang