全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

利用JS实现简单的瀑布流加载图片效果

今天学习了一个瀑布流加载效果,很多网站都有瀑布流效果,瀑布流就是很多产品显示在网页上,宽相同,高度不同,表现为多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。

原理是:

1.设定一行中的列数;

2.取第一行中每一个div的高度并把每一个高度放进一个数组中;

3.算出数组中最小高度的index值;

4.把第二行的第一个div放到最小高度的div的下方并把重新算出的高度值放进数组中,重新计算最小高度的index值;

5.以此类推实现多栏布局的瀑布流效果;

6.如果最后一张div的高度已滚动出现在底部时创建新的div添加到最后一张的后面,不断循环以达到加载效果;接下来代码实现。

<div id="main">
    <div class="box">
      <div class="Pic">
        <img src="images/0.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/1.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/2.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/3.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/4.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/5.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/6.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/7.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/8.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/9.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/10.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/11.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/12.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/13.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/14.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/15.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/16.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/17.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/18.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/19.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/20.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/21.jpg" alt="" />
      </div>
    </div>
    <div class="box">
      <div class="Pic">
        <img src="images/22.jpg" alt="" />
      </div>
    </div>
  </div>
 *{padding: 0;margin: 0;}
#main{
  width: 1000px;
  margin: 0 auto;
  position: relative;
}
.box{
  display: inline-block;
  float: left;
  padding: 10px 0 0 10px;
}
.Pic{
  border: 1px #ccc solid;
  padding: 10px;
  border-radius: 8px;
}
.Pic img{
  width: 162px;
}

js代码:

<script>
  window.onload=function(){
    waterFall('main','box');
    var dataInt={
      "data":[{"src":"0.jpg"},{"src":"1.jpg"},{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"},{"src":"6.jpg"},{"src":"7.jpg"}]
    };
     
    /*滚动条滚动时触发的事件*/
    window.onscroll=function(){
      if(checkIsSlide()){ //结果返回是true则执行
        var omain=document.getElementById('main');
        /*添加div到页面上*/
        for(var l=0;l<dataInt.data.length;l++){ 
          var box=document.createElement('div');
          box.className="box";
          omain.appendChild(box);
          var pic=document.createElement('div');
          pic.className='Pic';
          box.appendChild(pic);
          var oimg=document.createElement('img');
          oimg.src="images/"+dataInt.data[l].src;
          pic.appendChild(oimg);
        }
        waterFall('main','box'); //新添加的div都要重新执行waterFall方法,以实现瀑布流效果
      }
    }
  }
  /*实现瀑布流效果,多栏布局*/
  function waterFall(parent,pid){  //传两个参数,父元素parent和子元素pid
    var oparent=document.getElementById(parent);  //获取父元素
    var opid=getClass(oparent,pid);  //获取父元素下的classname为pid的所有子元素
    var cols=Math.floor(oparent.offsetWidth/opid[0].offsetWidth); //父元素宽度/一个子元素的宽度,即一行的列数
    var arrH=[];  //存放每一列的高度的数组
    for(var j=0;j<opid.length;j++){
      if(j<cols){ 
        arrH.push(opid[j].offsetHeight);//把第一行的高度都放进数组中
      }else{  //第二行开始
        var minH=Math.min.apply(null,arrH);  //计算arrH的最小值
        var Index=getHIndex(arrH,minH); //使用getHIndex方法获取最小值的index值
        /*把之后的div放到最小值div的下方*/
        opid[j].style.position='absolute'; 
        opid[j].style.top=minH+'px';
        opid[j].style.left=opid[0].offsetWidth*Index+'px';
        arrH[Index]+=opid[j].offsetHeight; //数组中的最小值加上已放在下方的div的高度值并重新循环
      }
    }
     
  }
 
  /*获取父元素下的classname为cls的所有元素*/
  function getClass(parent,cls){
    var obj=parent.getElementsByTagName('*');
    var Clsarr=[];
    for(var i=0;i<obj.length;i++){
      if(obj[i].className==cls){
        Clsarr.push(obj[i]);
      }
    }
    return Clsarr;
  }
  /*获取arr数组中的最小值minH的Index值*/
  function getHIndex(arr,minH){
    for(var k=0;k<arr.length;k++){
      if(arr[k]==minH){
        return k;
      }
    }
  }
  /*判断当前滚动的高度时候大于最后的div出现在底部的高度值,即是否要加载*/
  function checkIsSlide(){
    var omain=document.getElementById('main');
    var obox=getClass(omain,'box');
    var lastTop=obox[obox.length-1].offsetTop+Math.floor(obox[obox.length-1].offsetHeight/2);
    var scrollTop=document.body.scrollTop||document.documentElement.scrollTop;
    var documentH=document.documentElement.clientHeight;
    return (lastTop)<(scrollTop+documentH)?true:false;
  }
</script>

效果图如下:

以上所述是小编给大家介绍的利用JS实现简单的瀑布流加载图片效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# js  # 实现瀑布流  # js瀑布流加载图片  # js图片加载效果实例代码(延迟加载+瀑布流加载)  # JavaScript实现瀑布流以及加载效果  # javascript实现瀑布流动态加载图片原理  # javascript实现仿百度图片的瀑布流加载效果  # JavaScript实现图片自动加载的瀑布流效果  # 解析javascript瀑布流原理实现图片滚动加载  # javascript瀑布流式图片懒加载实例解析与优化  # javascript瀑布流式图片懒加载实例  # javascript实现瀑布流加载图片原理  # js实现动态加载数据瀑布流  # 组中  # 最小值  # 加载  # 出现在  # 并把  # 小编  # 滚动条  # 都有  # 放在  # 第一个  # 都要  # 在此  # 还会  # 以此类推  # 给大家  # 表现为  # 所述  # 给我留言  # 感谢大家  # 疑问请 


相关文章: 常州自助建站工具推荐:低成本搭建与模板选择技巧  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  装修招标网站设计制作流程,装修招标流程?  建站之星如何快速更换网站模板?  如何在万网自助建站平台快速创建网站?  建站之星免费版是否永久可用?  深圳网站制作的公司有哪些,dido官方网站?  高防服务器租用如何选择配置与防御等级?  如何通过IIS搭建网站并配置访问权限?  高防服务器:AI智能防御DDoS攻击与数据安全保障  微信小程序制作网站有哪些,微信小程序需要做网站吗?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  黑客入侵网站服务器的常见手法有哪些?  宝塔面板创建网站无法访问?如何快速排查修复?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  ,石家庄四十八中学官网?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  网站制作软件有哪些,制图软件有哪些?  如何通过老薛主机一键快速建站?  如何确保西部建站助手FTP传输的安全性?  如何在云服务器上快速搭建个人网站?  建站OpenVZ教程与优化策略:配置指南与性能提升  已有域名和空间如何快速搭建网站?  如何用AWS免费套餐快速搭建高效网站?  动图在线制作网站有哪些,滑动动图图集怎么做?  如何在云主机快速搭建网站站点?  如何在腾讯云服务器上快速搭建个人网站?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何快速搭建个人网站并优化SEO?  制作网站公司那家好,网络公司是做什么的?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  定制建站流程解析:需求评估与SEO优化功能开发指南  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  如何快速生成凡客建站的专业级图册?  建站主机选购指南与交易推荐:核心配置解析  如何用y主机助手快速搭建网站?  想学网站制作怎么学,建立一个网站要花费多少?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  如何通过VPS建站实现广告与增值服务盈利?  如何选择高效稳定的ISP建站解决方案?  高防服务器如何保障网站安全无虞?  已有域名和空间,如何快速搭建网站?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  如何零成本快速生成个人自助网站?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  建站之星3.0如何解决常见操作问题?  简历在线制作网站免费版,如何创建个人简历? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。