ホームページ >ウェブフロントエンド >jsチュートリアル >JS コードを共有してウォーターフォール フロー読み込み画像効果を実装する
今日は滝の流れの読み込みエフェクトを学びました。多くのウェブサイトに滝の流れの読み込みエフェクトが用意されています。必要な友達は参考にしてください。JS を使用する方法を紹介します。ウォーターフォール フロー ローディング効果。多くの Web サイトには、同じ幅と異なる高さの複数の商品がページ スクロール バーとして表示されます。下にスクロールすると、このレイアウトはデータ ブロックを読み込み続け、現在の末尾に追加されます。
原理は次のとおりです。1. 行の列数を設定します。
2. 最初の行の各 p の高さを配列に代入します。
3.最小高さのインデックス値
4. 最小高さの p の下の 2 行目に最初の p を配置し、再計算された高さの値を配列に入れて最小高さのインデックス値を再計算します。同様に、複数列レイアウトのウォーターフォール フロー効果を実現します。
6. 最後の p の高さがスクロールされて一番下に表示されている場合は、新しい p を作成して最後の p の後ろに追加します。継続的にループしてローディング効果を実現します。次に、コードが実装されます。
<p id="main"> <p class="box"> <p class="Pic"> <img src="images/0.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/1.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/2.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/3.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/4.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/5.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/6.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/7.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/8.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/9.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/10.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/11.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/12.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/13.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/14.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/15.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/16.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/17.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/18.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/19.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/20.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/21.jpg" alt="" /> </p> </p> <p class="box"> <p class="Pic"> <img src="images/22.jpg" alt="" /> </p> </p> </p>
*{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'); /*添加p到页面上*/ for(var l=0;l<dataInt.data.length;l++){ var box=document.createElement('p'); box.className="box"; omain.appendChild(box); var pic=document.createElement('p'); pic.className='Pic'; box.appendChild(pic); var oimg=document.createElement('img'); oimg.src="images/"+dataInt.data[l].src; pic.appendChild(oimg); } waterFall('main','box'); //新添加的p都要重新执行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值 /*把之后的p放到最小值p的下方*/ 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; //数组中的最小值加上已放在下方的p的高度值并重新循环 } } } /*获取父元素下的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; } } } /*判断当前滚动的高度时候大于最后的p出现在底部的高度值,即是否要加载*/ 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 コードを共有してウォーターフォール フロー読み込み画像効果を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。