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中Cookies的相关使用教程
Jun 04 Javascript
js实现点击向下展开的下拉菜单效果代码
Sep 01 Javascript
js实现表单多按钮提交action的处理方法
Oct 24 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
Jan 22 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
Apr 01 Javascript
详解VUE2.X过滤器的使用方法
Jan 11 Javascript
JavaScript复制内容到剪贴板的两种常用方法
Feb 27 Javascript
基于vue-router 多级路由redirect 重定向的问题
Sep 03 Javascript
vue+SSM实现验证码功能
Dec 07 Javascript
Django模板继承 extend标签实例代码详解
May 16 Javascript
小程序实现上下移动切换位置
Sep 23 Javascript
jQuery实现tab栏切换效果
Dec 22 jQuery
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实现用户在线时间统计详解
2011/10/08 PHP
destoon整合UCenter图文教程
2014/06/21 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
学习JavaScript的最佳方法分享
2011/10/21 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
jquery实现简易验证插件封装
2020/09/13 jQuery
Pyramid添加Middleware的方法实例
2013/11/27 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
python range()函数取反序遍历sequence的方法
2018/06/25 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
2019/05/31 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
python输出带颜色字体实例方法
2019/09/01 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
Python调用C语言程序方法解析
2020/07/07 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
幼儿园教师自我评价
2015/03/04 职场文书
研讨会通知
2015/04/27 职场文书
埃及王子观后感
2015/06/16 职场文书
2015入党自传格式范文
2015/06/26 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
python 闭包函数详细介绍
2022/04/19 Python