国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

JavaScript實(shí)現(xiàn)瀑布流布局的3種方式

瀏覽:3日期:2023-06-12 08:33:18

前言

今天逛閑魚的時候觀察到每一行的高度不是相同的,經(jīng)了解才知道原來這是一種瀑布流布局,感覺挺有意思,于是決定研究一下,在網(wǎng)上也找了一些方案,實(shí)現(xiàn)瀑布流大概有3種方式。

一、JS 實(shí)現(xiàn)瀑布流

思路分析

1、瀑布流布局的特點(diǎn)是等寬不等高。2、為了讓最后一行的差距最小,從第二行開始,需要將圖片放在第一行最矮的圖片下面,以此類推。3、父元素設(shè)置為相對定位,圖片所在元素設(shè)置為絕對定位。然后通過設(shè)置 top 值和 left 值定位每個元素。

代碼實(shí)現(xiàn)

<!DOCTYPE html><html><head> <style> .box { width: 100%; position:relative; } .item { position: absolute; } .item img{ width: 100%; height:100%; } </style></head><body><div class='box'> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div></div></body><script src='http://www.cgvv.com.cn/bcjs/jquery.min.js'></script><script> function waterFall() { // 1 確定圖片的寬度 - 滾動條寬度 var pageWidth = getClient().width-8; var columns = 3; //3列 var itemWidth = parseInt(pageWidth/columns); //得到item的寬度 $('.item').width(itemWidth); //設(shè)置到item的寬度 var arr = []; $('.box .item').each(function(i){ var height = $(this).find('img').height(); if (i < columns) { // 2 第一行按序布局 $(this).css({ top:0, left:(itemWidth) * i+20*i, }); //將行高push到數(shù)組 arr.push(height); } else { // 其他行 // 3 找到數(shù)組中最小高度 和 它的索引 var minHeight = arr[0]; var index = 0; for (var j = 0; j < arr.length; j++) { if (minHeight > arr[j]) { minHeight = arr[j]; index = j; } } // 4 設(shè)置下一行的第一個盒子位置 // top值就是最小列的高度 $(this).css({ top:arr[index]+30,//設(shè)置30的距離 left:$('.box .item').eq(index).css('left') }); // 5 修改最小列的高度 // 最小列的高度 = 當(dāng)前自己的高度 + 拼接過來的高度 arr[index] = arr[index] + height+30;//設(shè)置30的距離 } }); } //clientWidth 處理兼容性 function getClient() { return { width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight } } // 頁面尺寸改變時實(shí)時觸發(fā) window.onresize = function() { //重新定義瀑布流 waterFall(); }; //初始化 window.onload = function(){ //實(shí)現(xiàn)瀑布流 waterFall(); }</script></html>

效果如下

JavaScript實(shí)現(xiàn)瀑布流布局的3種方式

二、column 多行布局實(shí)現(xiàn)瀑布流

思路分析:

column 實(shí)現(xiàn)瀑布流主要依賴兩個屬性。一個是 column-count 屬性,是分為多少列。一個是 column-gap 屬性,是設(shè)置列與列之間的距離。

代碼實(shí)現(xiàn):

<!DOCTYPE html><html><head> <style> .box { margin: 10px; column-count: 3; column-gap: 10px; } .item { margin-bottom: 10px; } .item img{ width: 100%; height:100%; } </style></head><body><div class='box'> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div></div></body>

效果如下:

JavaScript實(shí)現(xiàn)瀑布流布局的3種方式

三、flex 彈性布局實(shí)現(xiàn)瀑布流

思路分析:

flex 實(shí)現(xiàn)瀑布流需要將最外層元素設(shè)置為 display: flex,即橫向排列。然后通過設(shè)置 flex-flow:column wrap 使其換行。設(shè)置 height: 100vh 填充屏幕的高度,來容納子元素。每一列的寬度可用 calc 函數(shù)來設(shè)置,即 width: calc(100%/3 - 20px)。分成等寬的 3 列減掉左右兩遍的 margin 距離。

代碼實(shí)現(xiàn):

<!DOCTYPE html><html><head> <style> .box { display: flex; flex-flow:column wrap; height: 100vh; } .item { margin: 10px; width: calc(100%/3 - 20px); } .item img{ width: 100%; height:100%; } </style></head><body><div class='box'> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.cgvv.com.cn/bcjs/banner.jpg' alt='' /> </div></div></body>

效果如下:

JavaScript實(shí)現(xiàn)瀑布流布局的3種方式

四、3種方式對比

如果只是簡單的頁面展示,可以使用 column 多欄布局和 flex 彈性布局。如果需要動態(tài)添加數(shù)據(jù),或者動態(tài)設(shè)置列數(shù),就需要使用到 JS + jQuery。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 精品国产高清a毛片无毒不卡 | 手机在线看福利 | 亚洲成年人在线观看 | 欧美日韩另类国产 | 亚洲在线免费免费观看视频 | 久久免费国产精品一区二区 | 99视频只有精品 | 在线男人的天堂 | 日本乱人伦片中文三区 | 亚洲成a人片在线观看精品 亚洲成a人片在线观看中 | 香蕉成人 | 欧洲成人免费高清视频 | 日本色中色 | 美女脱了内裤张开腿让男人桶网站 | 在线观看亚洲国产 | 偷柏自拍亚洲欧美综合在线图 | 国产欧美日韩高清专区手机版 | 亚洲欧美日韩国产精品 | 一级做a爰片久久毛片免费看 | 国产中文字幕视频 | 99国产在线 | 九九亚洲 | videos欧美丰满肥婆 | 国产一级特黄aaa大片 | 不卡精品国产_亚洲人成在线 | 国产美女野外做爰 | 久久精品亚洲一区二区 | 沈樵在线观看福利 | 亚洲精品国产免费 | 岛国在线免费观看 | 一区二区三区四区国产精品 | 在线亚洲精品国产波多野结衣 | 美女又黄又免费视频 | 99国产精品农村一级毛片 | 一级做a免费视频观看网站 一级做a爰 | 美女张开腿让我桶 | 精品一久久香蕉国产线看观 | 国产色视频一区二区三区 | 狠狠色狠狠色综合久久一 | 亚洲伦乱 | 欧美亚洲在线视频 |