91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用js實現瀑布流布局

發布時間:2023-04-14 10:15:00 來源:億速云 閱讀:106 作者:iii 欄目:web開發

這篇“如何用js實現瀑布流布局”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“如何用js實現瀑布流布局”文章吧。

一、前端代碼編寫

1、首先我們定義一個container容器來裝所有圖片,在這個容器中用box容器裝box-img容器再裝入每張圖片,這樣方便之后樣式的編寫。

2、使圖片同行顯示--給box容器使用float:left;屬性

3、讓圖片等寬顯示--給box-img容器設置width:150px;,img標簽設置width:100%;繼承父容器box-img高度的100%

4、為了使效果更好看,我們給裝圖片的容器設置內邊距,邊框和陰影的效果。

前端完整代碼附上:

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>waterFall</title>
   <script src="./index.js"></script>
</head>
<style>
   *{
       margin: 0;
       padding: 0;
   }
   .container {
       overflow: hidden;
       position: relative;
   }
   .box{
       float: left;
       padding: 5px;
   }
   .box-img{
       width: 150px;
       padding: 5px;
       border: 1px solid #484848;
       box-shadow: 0 0 5px #484848;
   }
   .box-img img{
       width: 100%;
   }
</style>
<body>
   <div id="container">
       <div>
           <div>
               <img src="./img/1.jpg" alt="">
          </div>
       </div>
       /*.......后面接39個box,此處省略*/
   </div>
   
</body>
</html>

二、js代碼編寫

1、首先用window.onload=function(){}來實現頁面加載完畢后立即執行的功能

在這個函數中,我們調用imgLocation('container','box')函數來呈現最終效果,傳入的實參是父容器'container'以及裝圖片的子容器'box'。

window.onload=function() {
   imgLocation('container','box')
}
2、實現imgLocation()函數功能
1)首先我們得獲取所有要擺放的圖片,并將其存入一個數組

利用document.getElementById(parent)得到父容器;

調用getChildElement(cparent,content)方法,在這個方法中,先獲取父容器所有標簽,對所有標簽遍歷并用if條件語句得到類名為box的容器(裝圖片的容器),將其存入我們自己構建的一個數組中,返回值為這個數組,方便之后通過遍歷來操作圖片擺放的位置。

function imgLocation(parent,content){
   var cparent=document.getElementById(parent)
   //cparent下的所有的第一層的子容器 box
   var ccontent=getChildElement(cparent,content)//數組,40個div
}

//取到父容器中的某一層子容器
function getChildElement(parent,content){
   var contentArr=[]
   var allContent=parent.getElementsByTagName('*')//通過標簽來選中得到一個數組
   //遍歷allContent把其中類名為content的容器都存到contentArr數組中
   for(var i=0;i<allContent.length;i++){
       if(allContent[i].className==content){    //當前這個容器的類名是否為content
           contentArr.push(allContent[i])
       }
   }
   return contentArr;

}
2)得到這個數組后,找出從誰開始是需要被擺放位置的

我們采用以下方法:

首先獲取視窗的寬度每張圖片的寬度,將兩者相除向下取整可得到第一行可以放置圖片的數量,自然也就知道了我們需要操作的那張圖片的序號

    //從誰開始是需要被擺放位置的
   var winWidth=document.documentElement.clientWidth;//視窗寬度
   var imgWidth=ccontent[0].offsetWidth;//圖片寬度

   var num=Math.floor(winWidth/imgWidth)//第一行能放幾張圖
3)得到需要被擺放位置的圖片序號后,確定其擺放位置

我們自己定義一個存儲高度的數組,對前一行元素的高度進行遍歷存入數組,當遍歷到需要被擺放位置的圖片時,用Math.min()方法獲取前一行高度最矮的元素高度,并用indexOf()方法獲取到其下標

再對我們所操作的這個圖片容器的樣式調整
position:absolute;絕對定位top值設置為前一行高度最矮的圖片高度minHeightleft值設置為單張圖片寬度這張圖片的下標minIndex。

最后,不要忘啦,擺放好圖片后,還要更新擺放的那一列的高度喲~

    //操作num+1張圖
   var BoxHeightArr=[]
   for(var i=0;i<ccontent.length;i++){
       //前num張只要計算高度
       if(i<num){
           BoxHeightArr[i]=ccontent[i].offsetHeight
       }
       else{
           //我們要操作的box  :ccontent[i]
           var minHeight=Math.min.apply(null,BoxHeightArr)//apply:把最小值這個方法借給它用
           var minIndex=BoxHeightArr.indexOf(minHeight)//返回數組下標
           ccontent[i].style.position='absolute'//style設置樣式
           ccontent[i].style.top=minHeight+'px'
           ccontent[i].style.left=imgWidth*minIndex+'px'

           //更新最矮的那一列的高度
           BoxHeightArr[minIndex]+=ccontent[i].offsetHeight
       }
   }

以上就是關于“如何用js實現瀑布流布局”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

定安县| 湟中县| 大新县| 临沧市| 普陀区| 江都市| 都江堰市| 台东县| 北宁市| 隆回县| 孝昌县| 遂昌县| 平塘县| 永泰县| 丹江口市| 佛冈县| 遵义市| 山西省| 石门县| 武山县| 乌海市| 洮南市| 蕉岭县| 镇平县| 华池县| 正镶白旗| 义乌市| 鸡东县| 沿河| 青海省| 忻城县| 漳平市| 九龙城区| 大宁县| 万源市| 简阳市| 民县| 鹤庆县| 界首市| 清涧县| 淮南市|