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 动画弹出窗体支持多种展现方式
Apr 29 Javascript
细说浏览器特性检测(2)-通用事件检测
Nov 05 Javascript
JavaScript中判断原生函数检查function是否是原生代码
Sep 09 Javascript
DOM基础教程之使用DOM控制表格
Jan 20 Javascript
微信小程序 数据访问实例详解
Oct 08 Javascript
JS 调用微信扫一扫功能
Dec 22 Javascript
vue.js获取数据库数据实例代码
May 26 Javascript
angular4自定义组件详解
Sep 28 Javascript
浅谈Redux中间件的实践
Jul 27 Javascript
json字符串传到前台input的方法
Aug 06 Javascript
vue里input根据value改变背景色的实例
Sep 29 Javascript
Vue3.0数据响应式原理详解
Oct 09 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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
php实现的SESSION类
2014/12/02 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
关于js类的定义
2011/06/28 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
实例教学如何写vue插件
2017/11/30 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
Python中collections模块的基本使用教程
2018/12/07 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
食品行业求职人的自我评价
2014/01/19 职场文书
学生会主席竞聘书
2014/03/31 职场文书
高中运动会广播稿
2014/09/16 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
2015年个人自我剖析材料
2014/12/29 职场文书
初任公务员培训心得体会
2016/01/08 职场文书