电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

JavaScript實現瀑布流布局的3種方式

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

前言

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

一、JS 實現瀑布流

思路分析

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

代碼實現

<!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.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div></div></body><script src='http://www.hdgsjgj.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); //設置到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到數組 arr.push(height); } else { // 其他行 // 3 找到數組中最小高度 和 它的索引 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 設置下一行的第一個盒子位置 // top值就是最小列的高度 $(this).css({ top:arr[index]+30,//設置30的距離 left:$('.box .item').eq(index).css('left') }); // 5 修改最小列的高度 // 最小列的高度 = 當前自己的高度 + 拼接過來的高度 arr[index] = arr[index] + height+30;//設置30的距離 } }); } //clientWidth 處理兼容性 function getClient() { return { width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight } } // 頁面尺寸改變時實時觸發 window.onresize = function() { //重新定義瀑布流 waterFall(); }; //初始化 window.onload = function(){ //實現瀑布流 waterFall(); }</script></html>

效果如下

JavaScript實現瀑布流布局的3種方式

二、column 多行布局實現瀑布流

思路分析:

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

代碼實現:

<!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.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div></div></body>

效果如下:

JavaScript實現瀑布流布局的3種方式

三、flex 彈性布局實現瀑布流

思路分析:

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

代碼實現:

<!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.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/show.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/cloth.jpg' alt='' /> </div> <div class='item'> <img src='http://www.hdgsjgj.cn/bcjs/banner.jpg' alt='' /> </div></div></body>

效果如下:

JavaScript實現瀑布流布局的3種方式

四、3種方式對比

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 无线遥控更衣吊篮_IC卡更衣吊篮_电动更衣吊篮配件_煤矿更衣吊篮-力得电子 | 振动筛,震动筛,圆形振动筛,振动筛价格,振动筛厂家-新乡巨宝机电 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 清洁设备_洗地机/扫地机厂家_全自动洗地机_橙犀清洁设备官网 | 宝元数控系统|对刀仪厂家|东莞机器人控制系统|东莞安川伺服-【鑫天驰智能科技】 | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | 防弹玻璃厂家_防爆炸玻璃_电磁屏蔽玻璃-四川大硅特玻科技有限公司 | 考勤系统_考勤管理系统_网络考勤软件_政企|集团|工厂复杂考勤工时统计排班管理系统_天时考勤 | 食药成分检测_调料配方还原_洗涤剂化学成分分析_饲料_百检信息科技有限公司 | 余姚生活网_余姚论坛_余姚市综合门户网站| 篷房|仓储篷房|铝合金篷房|体育篷房|篷房厂家-华烨建筑科技官网 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 衡阳耐适防护科技有限公司——威仕盾焊接防护用品官网/焊工手套/焊接防护服/皮革防护手套 | 瓶盖扭矩仪(扭力值检测)-百科 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 液氨泵,液化气泵-淄博「亚泰」燃气设备制造有限公司 | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 搪瓷搅拌器,搪玻璃搅拌器,搪玻璃冷凝器_厂家-淄博越宏化工设备 | 压力变送器-上海武锐自动化设备有限公司 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 德国BOSCH电磁阀-德国HERION电磁阀-JOUCOMATIC电磁阀|乾拓百科 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 上海办公室设计_办公楼,写字楼装修_办公室装修公司-匠御设计 | 北京森语科技有限公司-模型制作专家-展览展示-沙盘模型设计制作-多媒体模型软硬件开发-三维地理信息交互沙盘 | 亚洲工业智能制造领域专业门户网站 - 亚洲自动化与机器人网 | 耐火浇注料-喷涂料-浇注料生产厂家_郑州市元领耐火材料有限公司 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 陕西视频监控,智能安防监控,安防系统-西安鑫安5A安防工程公司 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 无锡市珂妮日用化妆品有限公司|珂妮日化官网|洗手液厂家 | 台湾Apex减速机_APEX行星减速机_台湾精锐减速机厂家代理【现货】-杭州摩森机电 | 置顶式搅拌器-优莱博化学防爆冰箱-磁驱搅拌器-天津市布鲁克科技有限公司 | 刚性-柔性防水套管-橡胶伸缩接头-波纹管补偿器-启腾供水材料有限公司 | 高博医疗集团上海阿特蒙医院| 找培训机构_找学习课程_励普教育 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 |