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 相关文章推荐
angular.js分页代码的实例
Jul 27 Javascript
关于验证码在IE中不刷新的快速解决方法
Sep 23 Javascript
利用canvas实现的加载动画效果实例代码
Jul 05 Javascript
基于daterangepicker日历插件使用参数注意的问题
Aug 10 Javascript
weex里Vuex state使用storage持久化详解
Sep 09 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
Oct 10 Javascript
Swiper自定义分页器使用详解
Dec 28 Javascript
nginx部署访问vue-cli搭建的项目的方法
Feb 12 Javascript
layui表格内容溢出的解决方法
Sep 06 Javascript
vue解决跨域问题(推荐)
Nov 10 Javascript
ES6中的类(Class)示例详解
Dec 09 Javascript
vue中封装axios并实现api接口的统一管理
Dec 25 Vue.js
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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
php 邮件发送问题解决
2014/03/22 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
js玩一玩WSH吧
2007/02/23 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
jQuery内部原理和实现方式浅析
2015/02/03 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
用Python解决计数原理问题的方法
2016/08/04 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
水果花束:Fruit Bouquets
2017/12/20 全球购物
会议接待欢迎标语
2014/10/08 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
员工评语范文
2014/12/31 职场文书
公司停电通知
2015/04/15 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫
Java 数据结构七大排序使用分析
2022/04/02 Java/Android