JS實(shí)現(xiàn)圖片瀑布流效果
本文實(shí)例為大家分享了JS實(shí)現(xiàn)圖片瀑布流的具體代碼,供大家參考,具體內(nèi)容如下
過程:
1、創(chuàng)建一個(gè)放所有圖片的模塊bigblock。
2、獲取這個(gè)大模塊,追加一個(gè)子元素塊來放小圖。
3、封裝一個(gè)函數(shù)list(n)來存放50張圖片,并且將每張圖追加放入空數(shù)組ele[]中。
4、封裝一個(gè)函數(shù)set_position(),來確定每個(gè)圖片的位置,用到了offsetHeight,offsetTop,offsetWidth等屬性,同時(shí)給最大塊也設(shè)置動(dòng)態(tài)的高度,隨著加載的圖片數(shù)量增多,最大塊的高度也隨著增高。
5、使用 window.onload事件,加載圖片更方便。
6、給瀏覽器的滾動(dòng)條添加事件,讓滾動(dòng)條滑到body的可視區(qū)域最底部以上10px 時(shí),加載出新的30張圖片,并且每次滾動(dòng)條停留在到剛加載的圖片位置。
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>photo瀑布流</title> <style> *{ margin:0; padding:0; } body{ /* background: #ebebeb;*/ background: url(./img/bging2.jpg ); background-size:100% ; height:100%; } .bigblock { position: relative; width:650px; min-height: 200px; background: #fff; margin:auto; } .smallblock{ position:absolute; width:100px; border-radius:5px ; box-shadow: 0 0 7px #89c8eb; box-sizing: border-box; overflow: hidden; } .photo{ width:100%; vertical-align: middle; } </style> </head> <body> <div class="bigblock"> </div> <script> var Big=document.getElementsByClassName ("bigblock")[0]; var ele=[]; var num=6; var bghight=0; var start=0; var image_img=["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg", "9.jpg", "10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","15.jpg","16.jpg","17.jpg"]; for(var i=0;i<50;i++){ list(); } function list(n){ var small=document.createElement("div"); var image=document.createElement("img"); small.className="smallblock"; image.className="photo"; image.src="./img/"+image_img[parseInt(Math.random()* image_img.length)]; //0-12 ele.push(small); Big.appendChild(small); small.appendChild (image); } function set_position(){ for(var i=start;i<ele.length;i++){ //設(shè)置每張圖片的位置 var settop=i <num ? 0: ele[i-num].offsetHeight +10 + ele[i-num].offsetTop ; ele[i].style.top=settop+"px"; var setleft = i %num * ele[i].offsetWidth + (i % num) * 10; ele[i].style.left=setleft+"px"; //獲取背景的高度 bghight =(ele[i].offsetHeight +ele[i].offsetTop)>bghight ? ele[i].offsetHeight +ele[i].offsetTop :bghight ; Big.style.height =bghight +"px"; } } window.onload=function(){ set_position(); //添加瀏覽器的滾動(dòng)條事件 this.addEventListener ("scroll",function(){ var b_height=document.body.clientHeight; if(parseInt (this.pageYOffset+ this.innerHeight ) > b_height-10 ){ start =ele.length; for(i=0;i<30;i++){ list(); } set_position (); } // console.log(b_height); //body的可視高度,可變 // console.log(this.pageYOffset); //滾動(dòng)條的上偏移量 // console.log(this.innerHeight); //瀏覽器可視區(qū)域的高 }) } </script> </body> </html>
圖片不是動(dòng)圖,看不出什么效果,但代碼都是正確的,小伙伴可以試一試。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
頁面載入結(jié)束自動(dòng)調(diào)用js函數(shù)示例
當(dāng)頁面加載完成后自動(dòng)調(diào)用預(yù)先編好的js函數(shù),在某些特殊情況下還是比較實(shí)用的,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下2013-09-09js簡(jiǎn)單的點(diǎn)擊返回頂部效果實(shí)現(xiàn)方法
這篇文章主要介紹了js簡(jiǎn)單的點(diǎn)擊返回頂部效果實(shí)現(xiàn)方法,實(shí)例分析了實(shí)現(xiàn)返回頂部效果的相關(guān)要點(diǎn)與實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-04-04使用typescript類型實(shí)現(xiàn)ThreeSum
這篇文章主要介紹了使用typescript類型實(shí)現(xiàn)ThreeSum,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以一下,希望對(duì)你學(xué)習(xí)又是幫助2022-08-08JavaScript實(shí)現(xiàn)Date()日期格式化的3種常用方法
Date()日期對(duì)象是一個(gè)構(gòu)造函數(shù),必須使用new來調(diào)用創(chuàng)建我們的日期對(duì)象,下面這篇文章主要給大家介紹了關(guān)于JavaScript實(shí)現(xiàn)Date()日期格式化的3種常用方法,需要的朋友可以參考下2024-05-05