亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

如何用JS實現網頁瀑布流布局

瀏覽:100日期:2024-04-01 13:59:50
前言:

瀑布流 又稱瀑布流式布局,是比較流行的一種網站頁面布局方式。即多行等寬元素排列,后面的元素依次添加到其后,等寬不等高,根據圖片原比例縮放直至寬度達到我們的要求,依次按照規則放入指定位置。

什么是瀑布流布局:

先看效果:

如何用JS實現網頁瀑布流布局

圖片多行等寬元素排列,后面的元素依次添加到其后,等寬不等高,根據圖片原比例縮放直至寬度達到我們的要求,依次按照規則放入指定位置。 為了方便理解,在此先給上html、css代碼

不完整html代碼:

<div id='container'><div class='box'> <div class='box-img'><img src='http://www.aoyou183.cn/bcjs/img/1.jpg' alt=''> </div></div><div class='box'> <div class='box-img'><img src='http://www.aoyou183.cn/bcjs/img/2.jpg' alt=''> </div></div><div class='box'> <div class='box-img'><img src='http://www.aoyou183.cn/bcjs/img/3.jpg' alt=''> </div></div> </div> ......<!-- 省略了圖片,多少張圖片自行決定-->

完整的css代碼

*{padding: 0;margin: 0; } #container{position: relative; } .box{float: left;padding: 15px; } .box-img {width: 150px;padding: 5px;border: 1px solid #ccc ;box-shadow: 0 0 5px #ccc;border-radius: 5px; } .box-img img{width: 100%;height: auto; }如何實現:

簡單地來說,如果要實現瀑布流布局,得完成這幾件事✍

1. 獲取圖片

function getChildElemnt() { const contentArr = []//定義數組準備裝圖 const parent = document.getElementById(container)//得到整個頁面 const allContent = parent.getElementsByTagName(’*’)//得到整個標簽 console.log(allContent); for (var i = 0; i < allContent.length; i++) { if (allContent[i].className == ’box’) {contentArr.push(allContent[i])//將class=’box’的標簽裝入數組 } } console.log(contentArr); return contentArr//返回數組 }2. 設置圖片寬帶

var ccontent = getChildElemnt() var imgWidth = ccontent[0].offsetWidth//令所有圖片寬度等于第一張圖片3. 計算瀏覽器頁面一行最多能存放圖片的數量

var dWidth=document.documentElement.clientWidth//頁面寬度var num = Math.floor(dWidth/ imgWidth)//Math.floor()向下取整4. 比較圖片高度

因為在瀑布流布局中,當第一行圖片已經擺滿后,第二行的第一張圖片要放在第一行中高度最小的圖片的下面

var BoxHeightArr = []//定義一個數組,把每張圖片的高度依次放進去 for (var i = 0; i < ccontent.length; i++) { if (i < num) {BoxHeightArr[i] = ccontent[i].offsetHeight//將圖片的高度存入數組 } else {//當第一行已經存放不了圖片后var minHeight = Math.min.apply(null, BoxHeightArr)//比較出上一行最小的高度 } }5. 得到上一行中最小高度圖片的位置

//定義一個getMinHeightLocation函數,給它傳入BoxHeightArr上一行全部圖片,和minHeight上一行圖片的最小高度 function getMinHeightLocation(BoxHeightArr, minHeight) { for (var i in BoxHeightArr) { if (BoxHeightArr[i] === minHeight) {//當圖片高度等于最小高度時,該圖片的位置為最小高度圖片的位置return i } } }6. 插圖

for (var i = 0; i < ccontent.length; i++) { if (i < num) { BoxHeightArr[i] = ccontent[i].offsetHeight } else { var minHeight = Math.min.apply(null, BoxHeightArr) var minIndex = getMinHeightLocation(BoxHeightArr, minHeight) ccontent[i].style.position = ’absolute’//將要插入的圖片絕對定位,即元素的位置通過 'left', 'top', 'right' 以及 'bottom' 屬性進行規定 ccontent[i].style.top = minHeight + ’px’//令插入的圖片到頂端的距離剛好等于要插其下面圖片的高度 ccontent[i].style.left = ccontent[minIndex].offsetLeft + ’px’//令插入的圖片到最左邊的距離剛好等于要插其下面圖片到最左邊的距離 BoxHeightArr[minIndex] = BoxHeightArr[minIndex] + ccontent[i].offsetHeight//插入圖片后,得將這位置的高度設為兩張圖片的高度和 } }完整代碼如下:

優化代碼,提高性能

window.onload = function() { imgLocation(’container’, ’box’)//構造函數imgLocation}//用window.onload = function() {}函數就不用等著body頁面中調用就可以執行了// 獲取到當前有多少張圖片要擺放function imgLocation(parent, content) {//令parent=’container’,content=’box’ // 將parent下所有的內容全部取出 var cparent = document.getElementById(parent) var ccontent = getChildElemnt(cparent, content) var imgWidth = ccontent[0].offsetWidth var num = Math.floor(document.documentElement.clientWidth / imgWidth) cparent.style.cssText = `width: ${imgWidth * num} px` var BoxHeightArr = [] for (var i = 0; i < ccontent.length; i++) { if (i < num) { BoxHeightArr[i] = ccontent[i].offsetHeight } else { var minHeight = Math.min.apply(null, BoxHeightArr) var minIndex = getMinHeightLocation(BoxHeightArr, minHeight) ccontent[i].style.position = ’absolute’ ccontent[i].style.top = minHeight + ’px’ ccontent[i].style.left = ccontent[minIndex].offsetLeft + ’px’ BoxHeightArr[minIndex] = BoxHeightArr[minIndex] + ccontent[i].offsetHeight } } // console.log(BoxHeightArr);}function getChildElemnt(parent, content) {parent=’container’,content=’box’ const contentArr = [] const allContent = parent.getElementsByTagName(’*’) console.log(allContent); for (var i = 0; i < allContent.length; i++) { if (allContent[i].className == content) { contentArr.push(allContent[i]) } } console.log(contentArr); return contentArr}function getMinHeightLocation(BoxHeightArr, minHeight) { for (var i in BoxHeightArr) { if (BoxHeightArr[i] === minHeight) { return i } }}

以上就是如何用JS實現網頁瀑布流布局的詳細內容,更多關于JS實現網頁瀑布流布局的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 91久久国产情侣真实对白 | 在线观看黄网视频免费播放 | 国产最强大片免费视频 | 你懂的免费在线 | 亚洲 欧美 清纯 校园 另类 | 日本一级毛片大片免费 | 久草热视频在线 | 黄色18网站| 亚洲国产剧情在线精品视 | 国产a级三级三级三级中国 国产a级午夜毛片 | 伊人久久成人爱综合网 | 欧美午夜理伦三级在线观看 | 国产精品欧美亚洲韩国日本久久 | 中文字幕一区精品欧美 | 国产成人综合手机在线播放 | 国产在线91观看免费观看 | 在线日韩国产 | 免费一级a毛片在线播放视 免费一级a毛片免费观看欧美大片 | 青青久久久国产线免观 | 国产日产欧产精品精品推荐在线 | 国产另类视频 | 亚洲爆乳无码一区二区三区 | 国产色中色 | 萌白酱福利视频在线网站 | 国产精品v欧美精品∨日韩 国产精品www | 国产一区二区三区丶四区 | 国产成人久视频免费 | 成人男女啪啪免费观看网站 | 一级特级黄色片 | 国产精品免费久久久免费 | 最新国产视频 | 在线免费看一级片 | 女人毛片在线 | 日韩 欧美 亚洲 中文字幕 | 亚洲综合偷自成人网第页 | 成人免费大片黄在线观看com | 国产福利不卡 | 久久精品在现线观看免费15 | 免费亚洲黄色 | 国产一区在线免费观看 | 午夜宅男宅女 |