Maison >interface Web >js tutoriel >Implémentation JS d'un exemple de disposition de flux en cascade

Implémentation JS d'un exemple de disposition de flux en cascade

小云云
小云云original
2018-01-04 11:12:491437parcourir

Cet article présente principalement en détail l'implémentation JS de l'affichage des effets de disposition du flux en cascade. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer.

partie html


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>瀑布流布局</title>
  <script src="wallpoll.js"></script>
  <link rel="stylesheet" href="wallpoll.css" rel="external nofollow" >
</head>
<body>
  <p id="main">
    <p class="box">
      <p class="pic">
        <img src="wallpoll/0.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/0.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/1.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/2.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/3.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/4.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/5.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/6.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/7.jpg" alt="">
      </p>
    </p>

    <p class="box">
      <p class="pic">
        <img src="wallpoll/8.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/9.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/10.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/11.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/12.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/13.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/14.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/15.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/16.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/17.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/18.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/19.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/20.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/21.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/22.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/23.jpg" alt="">
      </p>
    </p>
    <p class="box">
      <p class="pic">
        <img src="wallpoll/24.jpg" alt="">
      </p>
    </p>
  </p>
</body>
</html>

partie css


*{
  padding:0px;
  margin:0px;
}
.main{
  position:relative;
}
.box{
  padding:15px 0 0 10px;
  float:left;
}
.pic{
  padding:10px;
  border: 1px solid #ccc;
  border-radius: 5px;
  box-shadow: 0 0 5px #ccc;
  /*float:left;*/
}
img{
  width:170px;
  height:auto;
}

partie JS


window.onload=function(){
  waterfall(&#39;main&#39;,&#39;box&#39;);
  var dataInt={"data":[{"src":"0.jpg"},{"src":"1.jpg"},{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"}]}
  window.onscroll=function(){
    if(checkScrollSlide){
      for(var i=0;i<dataInt.data.length;i++){
        var oparent=document.getElementById("main");
        var box=document.createElement("p");
        box.className="box";
        oparent.appendChild(box);
        var pic=document.createElement("p");
        pic.className="pic";
        box.appendChild(pic);
        var img=document.createElement("img");
        img.src="wallpoll/"+dataInt.data[i].src;
        pic.appendChild(img);
      }
    }
    waterfall(&#39;main&#39;,&#39;box&#39;);
  }
}
function waterfall(parent,child){
  var oparent=document.getElementById(parent);
  var boxs=oparent.getElementsByClassName(child);
  var boxw=boxs[0].offsetWidth;
  var cols=Math.floor(document.documentElement.clientWidth/boxw);
  oparent.style.cssText="width:"+cols*boxw+"px;margin:0 auto";
  var harr=new Array();
  for(var i=0;i<boxs.length;i++){
    if(i<cols){
      harr.push(boxs[i].offsetHeight);
     }else{
      var minH=Math.min.apply(null,harr);
      var index=getMinhIndex(harr,minH);
      boxs[i].style.position="absolute";
      boxs[i].style.top=minH+"px";
      boxs[i].style.left=boxs[index].offsetLeft+"px";
      harr[index]+=boxs[i].offsetHeight;
    }
  }
}
function getMinhIndex(arr,val){
  for(var i in arr){
    if(arr[i]===val){
      return i;
    }
  }
}
function checkScrollSlide(){
  var oparent=document.getElementById("main");
  var boxs=oparent.getElementsByClassName("box");
  var lastBox=boxs[boxs.length-1];
  var height=lastBox.offsetTop+Math.floor(lastBox.offsetHeight/2);
  var scrollHeigth=document.documentElement.scrollTop || document.body.scrollTop;
  // console.log(scrollHeigth);
  var seeHeigth=document.documentElement.clientHeigth || document.body.clientHeigth;
  return seeHeigth+scrollHeigth>height?true:false;
}

Recommandations associées :

Partage d'exemples de démonstration de flux de cascade ajax natif

Implémentation JS de Cascade Exemple d'analyse de la disposition du flux

Comment obtenir un effet de flux en cascade avec JS

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn