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

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

如何用JS實(shí)現(xiàn)網(wǎng)頁(yè)瀑布流布局

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

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

什么是瀑布流布局:

先看效果:

如何用JS實(shí)現(xiàn)網(wǎng)頁(yè)瀑布流布局

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

不完整html代碼:

<div id='container'><div class='box'> <div class='box-img'><img src='http://www.hdgsjgj.cn/bcjs/img/1.jpg' alt=''> </div></div><div class='box'> <div class='box-img'><img src='http://www.hdgsjgj.cn/bcjs/img/2.jpg' alt=''> </div></div><div class='box'> <div class='box-img'><img src='http://www.hdgsjgj.cn/bcjs/img/3.jpg' alt=''> </div></div> </div> ......<!-- 省略了圖片,多少?gòu)垐D片自行決定-->

完整的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; }如何實(shí)現(xiàn):

簡(jiǎn)單地來(lái)說(shuō),如果要實(shí)現(xiàn)瀑布流布局,得完成這幾件事✍

1. 獲取圖片

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

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

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

因?yàn)樵谄俨剂鞑季种校?dāng)?shù)谝恍袌D片已經(jīng)擺滿(mǎn)后,第二行的第一張圖片要放在第一行中高度最小的圖片的下面

var BoxHeightArr = []//定義一個(gè)數(shù)組,把每張圖片的高度依次放進(jìn)去 for (var i = 0; i < ccontent.length; i++) { if (i < num) {BoxHeightArr[i] = ccontent[i].offsetHeight//將圖片的高度存入數(shù)組 } else {//當(dāng)?shù)谝恍幸呀?jīng)存放不了圖片后var minHeight = Math.min.apply(null, BoxHeightArr)//比較出上一行最小的高度 } }5. 得到上一行中最小高度圖片的位置

//定義一個(gè)getMinHeightLocation函數(shù),給它傳入BoxHeightArr上一行全部圖片,和minHeight上一行圖片的最小高度 function getMinHeightLocation(BoxHeightArr, minHeight) { for (var i in BoxHeightArr) { if (BoxHeightArr[i] === minHeight) {//當(dāng)圖片高度等于最小高度時(shí),該圖片的位置為最小高度圖片的位置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’//將要插入的圖片絕對(duì)定位,即元素的位置通過(guò) 'left', 'top', 'right' 以及 'bottom' 屬性進(jìn)行規(guī)定 ccontent[i].style.top = minHeight + ’px’//令插入的圖片到頂端的距離剛好等于要插其下面圖片的高度 ccontent[i].style.left = ccontent[minIndex].offsetLeft + ’px’//令插入的圖片到最左邊的距離剛好等于要插其下面圖片到最左邊的距離 BoxHeightArr[minIndex] = BoxHeightArr[minIndex] + ccontent[i].offsetHeight//插入圖片后,得將這位置的高度設(shè)為兩張圖片的高度和 } }完整代碼如下:

優(yōu)化代碼,提高性能

window.onload = function() { imgLocation(’container’, ’box’)//構(gòu)造函數(shù)imgLocation}//用window.onload = function() {}函數(shù)就不用等著body頁(yè)面中調(diào)用就可以執(zhí)行了// 獲取到當(dāng)前有多少?gòu)垐D片要擺放function imgLocation(parent, content) {//令parent=’container’,content=’box’ // 將parent下所有的內(nèi)容全部取出 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實(shí)現(xiàn)網(wǎng)頁(yè)瀑布流布局的詳細(xì)內(nèi)容,更多關(guān)于JS實(shí)現(xiàn)網(wǎng)頁(yè)瀑布流布局的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 防火卷帘门价格-聊城一维工贸特级防火卷帘门厂家▲ | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 旗杆生产厂家_不锈钢锥形旗杆价格_铝合金电动旗杆-上海锥升金属科技有限公司 | [品牌官网]贵州遵义双宁口腔连锁_贵州遵义牙科医院哪家好_种植牙_牙齿矫正_原华美口腔 | 一点车讯-汽车网站,每天一点最新车讯! | 厂房出租_厂房出售_产业园区招商_工业地产&nbsp;-&nbsp;中工招商网 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 苹果售后维修点查询,苹果iPhone授权售后维修服务中心 – 修果网 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 中天寰创-内蒙古钢结构厂家|门式刚架|钢结构桁架|钢结构框架|包头钢结构煤棚 | 洁净实验室工程-成都手术室净化-无尘车间装修-四川华锐净化公司-洁净室专业厂家 | 氢氧化钾厂家直销批发-济南金昊化工有限公司 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 恒湿机_除湿加湿一体机_恒湿净化消毒一体机厂家-杭州英腾电器有限公司 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 路面机械厂家 | 超声波清洗机-超声波清洗设备定制生产厂家 - 深圳市冠博科技实业有限公司 | 南京交通事故律师-专打交通事故的南京律师 | 低温柔性试验仪-土工布淤堵-沥青车辙试验仪-莱博特(天津)试验机有限公司 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 内窥镜-工业内窥镜厂家【上海修远仪器仪表有限公司】 | 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 智能楼宇-楼宇自控系统-楼宇智能化-楼宇自动化-三水智能化 | 桑茶-七彩贝壳桑叶茶 长寿茶| 六维力传感器_三维力传感器_二维力传感器-南京神源生智能科技有限公司 | 气弹簧定制-气动杆-可控气弹簧-不锈钢阻尼器-工业气弹簧-可调节气弹簧厂家-常州巨腾气弹簧供应商 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 【电子厂招聘_普工招工网_工厂招聘信息平台】-工立方打工网 | 烟台金蝶财务软件,烟台网站建设,烟台网络推广 | 水冷散热器_水冷电子散热器_大功率散热器_水冷板散热器厂家-河源市恒光辉散热器有限公司 | 政府园区专业委托招商平台_助力企业选址项目快速落地_东方龙商务集团 | 挤出熔体泵_高温熔体泵_熔体出料泵_郑州海科熔体泵有限公司 | 熔体泵_熔体出料泵_高温熔体泵-郑州海科熔体泵有限公司 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 |