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静态的动态
Sep 18 Javascript
让你的博客飘雪花超出屏幕依然看得见
Jan 04 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
Nov 25 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
Apr 01 Javascript
javascript设计模式之单体模式学习笔记
Feb 15 Javascript
Vue侧滑菜单组件——DrawerLayout
Dec 18 Javascript
除Console.log()外更多的Javascript调试命令
Jan 24 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
Feb 13 jQuery
构建大型 Vue.js 项目的10条建议(小结)
Nov 14 Javascript
Vue实现验证码功能
Dec 03 Javascript
简介JavaScript错误处理机制
Aug 04 Javascript
node.js通过url读取文件
Oct 16 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入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
Javascript 解疑
2009/11/11 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
用vue写一个日历
2020/11/02 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python操作redis的方法
2015/07/07 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
什么是Python包的循环导入
2020/09/08 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
有限公司股东合作协议书
2014/10/29 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL
详解python的内存分配机制
2021/05/10 Python