最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用JS實(shí)現(xiàn)簡(jiǎn)單的瀑布流加載圖片效果

 更新時(shí)間:2017年04月22日 08:11:24   作者:heyujun-  
今天學(xué)習(xí)了一個(gè)瀑布流加載效果,很多網(wǎng)站都有瀑布流效果,下面通過(guò)本文給大家分享利用JS實(shí)現(xiàn)簡(jiǎn)單的瀑布流加載圖片效果,需要的朋友參考下吧

今天學(xué)習(xí)了一個(gè)瀑布流加載效果,很多網(wǎng)站都有瀑布流效果,瀑布流就是很多產(chǎn)品顯示在網(wǎng)頁(yè)上,寬相同,高度不同,表現(xiàn)為多欄布局,隨著頁(yè)面滾動(dòng)條向下滾動(dòng),這種布局還會(huì)不斷加載數(shù)據(jù)塊并附加至當(dāng)前尾部。

原理是:

1.設(shè)定一行中的列數(shù);

2.取第一行中每一個(gè)div的高度并把每一個(gè)高度放進(jìn)一個(gè)數(shù)組中;

3.算出數(shù)組中最小高度的index值;

4.把第二行的第一個(gè)div放到最小高度的div的下方并把重新算出的高度值放進(jìn)數(shù)組中,重新計(jì)算最小高度的index值;

5.以此類推實(shí)現(xiàn)多欄布局的瀑布流效果;

6.如果最后一張div的高度已滾動(dòng)出現(xiàn)在底部時(shí)創(chuàng)建新的div添加到最后一張的后面,不斷循環(huán)以達(dá)到加載效果;接下來(lái)代碼實(shí)現(xiàn)。

<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"}]
    };
     
    /*滾動(dòng)條滾動(dòng)時(shí)觸發(fā)的事件*/
    window.onscroll=function(){
      if(checkIsSlide()){ //結(jié)果返回是true則執(zhí)行
        var omain=document.getElementById('main');
        /*添加div到頁(yè)面上*/
        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都要重新執(zhí)行waterFall方法,以實(shí)現(xiàn)瀑布流效果
      }
    }
  }
  /*實(shí)現(xiàn)瀑布流效果,多欄布局*/
  function waterFall(parent,pid){  //傳兩個(gè)參數(shù),父元素parent和子元素pid
    var oparent=document.getElementById(parent);  //獲取父元素
    var opid=getClass(oparent,pid);  //獲取父元素下的classname為pid的所有子元素
    var cols=Math.floor(oparent.offsetWidth/opid[0].offsetWidth); //父元素寬度/一個(gè)子元素的寬度,即一行的列數(shù)
    var arrH=[];  //存放每一列的高度的數(shù)組
    for(var j=0;j<opid.length;j++){
      if(j<cols){ 
        arrH.push(opid[j].offsetHeight);//把第一行的高度都放進(jìn)數(shù)組中
      }else{  //第二行開始
        var minH=Math.min.apply(null,arrH);  //計(jì)算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; //數(shù)組中的最小值加上已放在下方的div的高度值并重新循環(huán)
      }
    }
     
  }
 
  /*獲取父元素下的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數(shù)組中的最小值minH的Index值*/
  function getHIndex(arr,minH){
    for(var k=0;k<arr.length;k++){
      if(arr[k]==minH){
        return k;
      }
    }
  }
  /*判斷當(dāng)前滾動(dòng)的高度時(shí)候大于最后的div出現(xiàn)在底部的高度值,即是否要加載*/
  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實(shí)現(xiàn)簡(jiǎn)單的瀑布流加載圖片效果,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

玉树县| 弋阳县| 黄山市| 菏泽市| 罗甸县| 安陆市| 武义县| 德令哈市| 曲麻莱县| 平南县| 绵竹市| 莆田市| 尉犁县| 河南省| 东乡族自治县| 西畴县| 怀化市| 崇礼县| 资源县| 天门市| 敖汉旗| 宣恩县| 嘉峪关市| 临泉县| 自贡市| 巴楚县| 东乌珠穆沁旗| 凌海市| 泸溪县| 昌都县| 调兵山市| 彭山县| 西和县| 南乐县| 天柱县| 和田县| 汝州市| 疏勒县| 吉木萨尔县| 靖江市| 砚山县|