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 replace方法与正则表达式
Feb 19 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
Jan 13 Javascript
JS 仿腾讯发表微博的效果代码
Dec 25 Javascript
JavaSript中变量的作用域闭包的深入理解
May 12 Javascript
HTML,CSS,JavaScript速查表推荐
Dec 02 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
Jan 28 Javascript
简单理解vue中Props属性
Oct 27 Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 Javascript
js正则表达式验证密码强度【推荐】
Mar 03 Javascript
AngularJS改变元素显示状态
Apr 20 Javascript
使用Math.max,Math.min获取数组中的最值实例
Apr 25 Javascript
Python机器学习之决策树和随机森林
Jul 15 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中SQL注入攻击与XSS攻击
2012/06/10 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
python BeautifulSoup使用方法详解
2013/11/21 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
python制作小说爬虫实录
2017/08/14 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
Python实现的堆排序算法示例
2018/04/29 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
python yield关键词案例测试
2019/10/15 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
物流专业大学的自我评价
2014/01/11 职场文书
高中体育教学反思
2014/01/24 职场文书
市三好学生主要事迹
2014/01/28 职场文书
运动会通讯稿150字
2014/02/15 职场文书
施工安全责任书
2014/04/14 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
Flask response响应的具体使用
2021/07/15 Python
Python可变集合和不可变集合的构造方法大全
2021/12/06 Python
HTML基本元素标签介绍
2022/02/28 HTML / CSS