IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

當前位置:首頁 > IT課程問答

H5教學-瀑布流 時間:2023-04-23      來源:華清遠見

瀑布流

一、認識瀑布流

瀑布流,又稱瀑布流式布局。最早采用此布局的網站是Pinterest,視覺效果表現為參差不齊的多欄布局,即多行等寬不等高的元素依次排列。瀑布流布局的具體效果如下圖:

二、為什么要使用瀑布流

目前大多數網站采用的布局都是有規律的多列布局,即每列等寬,每行等高。而參差不齊的瀑布流式布局能給用戶不一樣的視覺沖擊效果。另外瀑布流結合下拉刷新,上拉加載進行數據的懶加載等操作,對于用戶的體驗感也是非常好的。

瀑布流主要針對的是帶圖片網站的內容展示,對于大小不一的圖片按照一定的規律排列。即對大小不一的圖片,讓其等比縮放的顯示在頁面中,可保證圖片不失真,可以有效的提高用戶體驗。

三、瀑布流的圖例分析

先用圖片分析一下我們想要的瀑布流是什么樣的

如下圖所示,假設一排五列。第一排排滿后,顯示的是這樣的。那么我們要放第6張圖片的時候,應該放在什么位置呢?

按照正常邏輯,第六張應該是放在第一張圖片下面,然后依次水平排列過去,如下圖:

但這樣下去可能會導致每列之間的高度差距越來越大,并不符合實際瀑布流效果要求,在瀑布流中,從第六張圖片開始,接下去的每一張圖片都應該放在高度最低的那一列圖片下方。如下圖:

即從第六張圖片開始都需要計算哪一列的圖片累計的高度最小,然后下一張圖片就應該放在哪一列。

四、具體實現

HTML代碼

 

 

 

 

 

     加載中...

 

 

 

 

CSS代碼

* {

            margin: 0;

            padding: 0;

        }

        .content {

            width: 1240px;

            margin: 0 auto;

            position: relative;

        }

        .shop {

            width: 240px;

            border: 1px solid #f00;

            box-sizing: border-box;

            position: absolute;

        }

        .shop img {

            width: 100%;

        }

        .shopName{

            height: 60px;

        }

.loadBox {

            display: flex;

            justify-content: center;

            align-items: center;

            padding: 10px;

            color: gray;

            font-size: 14px;

        }

 

        .loadBox img{

            animation: load 0.8s infinite;

        }

        @keyframes load {

            from{

                transform: rotate(0);

            }to{

                transform: rotate(360deg);

            }

        }

 

 

JS代碼

let data = [{

            id: 1,

            shopname: '圖片1',

            imgUrl:

"https://img1.baidu.com/it/u=709381787,3386403196&fm=253&fmt=auto&app=138&f=JPEG?w=599&h=500"

 

        }, {

            id: 2,

            shopname: '圖片2',

            imgUrl: "https://img0.baidu.com/it/u=1489670366,411382419&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=753"

        }, {

            id: 3,

            shopname: '圖片3',

            imgUrl: "https://img1.baidu.com/it/u=3255035444,3515309779&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=666"

 

        }, {

            id: 4,

            shopname: '圖片4',

            imgUrl: "https://img2.baidu.com/it/u=3173263148,4118504965&fm=253&fmt=auto&app=138&f=JPEG?w=620&h=500"

        }, {

            id: 5,

            shopname: '圖片5',

            imgUrl: "https://img0.baidu.com/it/u=2628882850,1202220801&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=498"

        }, {

            id: 6,

            shopname: '圖片6',

            imgUrl: "https://img1.baidu.com/it/u=740708162,4263244726&fm=253&fmt=auto&app=120&f=JPEG?w=1280&h=800"

        }, {

            id: 7,

            shopname: '圖片7',

            imgUrl: "https://img1.baidu.com/it/u=701043886,582191677&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500"

 

        }, {

            id: 8,

            shopname: '圖片8',

            imgUrl: "https://img0.baidu.com/it/u=3878848433,891453978&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=667"

        }, {

            id: 9,

            shopname: '圖片9',

            imgUrl: "https://img1.baidu.com/it/u=1621477098,3345707124&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=771"

        }, {

            id: 10,

            shopname: '圖片10',

            imgUrl: "https://img1.baidu.com/it/u=2062807354,75688956&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500"

        }, {

            id: 11,

            shopname: '圖片11',

            imgUrl: "https://img2.baidu.com/it/u=1190852256,1138303662&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=375"

        }, {

            id: 12,

            shopname: '圖片12',

            imgUrl: "https://img0.baidu.com/it/u=2280903142,1037129928&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=500"

        }, {

            id: 13,

            shopname: '圖片13',

            imgUrl: "https://img0.baidu.com/it/u=1911023561,1873370868&fm=253&fmt=auto&app=138&f=JPEG?w=282&h=500"

        }, {

            id: 14,

            shopname: '圖片14',

            imgUrl: "https://img0.baidu.com/it/u=1303056880,3446954677&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=667"

        }, {

            id: 15,

            shopname: '圖片15',

            imgUrl: "https://img0.baidu.com/it/u=2463246409,2913214612&fm=253&fmt=auto&app=138&f=JPEG?w=750&h=500"

        }, {

            id: 16,

            shopname: '圖片16',

            imgUrl: "https://img1.baidu.com/it/u=673572676,3486461689&fm=253&fmt=auto&app=138&f=JPEG?w=667&h=500"

        }, {

            id: 17,

            shopname: '圖片17',

            imgUrl: "https://img0.baidu.com/it/u=1118388590,847334752&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500"

        }, {

            id: 18,

            shopname: '圖片18',

            imgUrl: "https://img2.baidu.com/it/u=1392060445,3405288279&fm=253&fmt=auto&app=138&f=JPEG?w=300&h=500"

        }];

        let content = document.querySelector('.content');

 

        function getData() {

            return new Promise((resolve, reject) => {

                setInterval(() => {

                    resolve(data);

                }, 600);//假設發起網絡請求數據需要600ms

            });

        }

 

        let colHeight = [];//用于存儲每一列的高度

        let lastShop  = null;//用于存儲最后放入content的div

        async function showData(isScroll=false) {

            let r = await getData();

            let shopBox = document.createDocumentFragment();

           

            r.forEach((item, index) => {

                // 創建圖片

                let img = new Image();

                img.src = item.imgUrl;

                let imgInfo = item.imgUrl.split("?")[1].split("&");

                /*

                    imgHeight                       imgWidth:240

                    imgInfo[1].split("=")[1]        imgInfo[0].split("=")[1]

                */

                let imgHeight = imgInfo[1].split("=")[1]*240/imgInfo[0].split("=")[1];

                img.style.height = imgHeight + 'px';

 

              // 創建圖片div

                let shopdiv = document.createElement('div');

                shopdiv.classList.add('shop');

                // 創建放圖片名字的div

                let shopNameDiv = document.createElement('div');

                shopNameDiv.classList.add('shopName');

                shopNameDiv.innerHTML = item.shopname;

 

                let left;

                let top  = 0;

                if(index<=4&&!isScroll){

                    colHeight.push(imgHeight+60+2+10);//第一行:圖片高度+文字div高度60+上下邊框2+底部間距10

                    // 計算放每個圖片的div的left值

                    left = (240 + 12) * (index % 5);

                }else{

                    //需要每次計算找到最低的一列

                    let minColH = Math.min(...colHeight);//最低一列的高度

                    let minCol  = colHeight.indexOf(minColH);//找出最低的是第幾列

                    // console.log(minCol,minColH);

 

                    // 計算放每個圖片的div的left值

                    left = (240 + 12) * minCol;

                    // 計算放每個圖片的div的top值

                    top  = minColH;

 

                    // 改變每一列的高度

                    colHeight[minCol] += imgHeight+60+2+10;//imgHeight+60+2+10: 圖片高度+文字div高度60+上下邊框2+底部間距10

                }

 

                shopdiv.style.top  = top + 'px';

                shopdiv.style.left = left + 'px';

 

                shopdiv.append(img);

                shopdiv.append(shopNameDiv);

                shopBox.append(shopdiv);

 

                if(index == r.length-1){//判斷是否是最后一條數據

                    lastShop = shopdiv;

                }

            });

            content.append(shopBox);

        }

        showData();

 

        let flag = false;//用于判斷觸底加載數據是否加載完成

        window.onscroll = async function () {//監聽滾動條滾動

            if (lastShop.getBoundingClientRect().y < window.innerHeight+500 && flag == false) {//觸底加載新數據

                flag = true;//正在加載

 

                await showData(true);

                flag = false;//加載完成

            }

        }

 

最終效果圖如下:

上一篇:JAVA-Nacos多環境配置

下一篇:沒有了

戳我查看2024年嵌入式每月就業風云榜

點我了解華清遠見高校學霸學習秘籍

猜你關心企業是如何評價華清學員的

干貨分享
相關新聞
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2024 北京華清遠見科技發展有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 万向轴承_福来轮_全向轮_双向转轮_万向球_算盘轮_塑料卷轴-宁津县正彤机械塑料有限公司 | 客服外包_电话调查_电话调研_售前售后在线外包客服公司-北京美宸互联 | 粮食烘干机|玉米烘干机|稻谷烘干机|小麦烘干机|大型连续烘干塔|500吨连续烘干塔|钢板仓|-郑州新光矿山机械制造有限公司 | 中山电子控制板|中山工业控制板|中山市云禾电子科技有限公司 | 优质课网_收录全国及各省市最新优质课视频,说课视频,名师课例课堂实录,高效课堂教学视频,观摩展示公开示范优秀课视频,教学大赛视频! | 无尘投料站-真空上料机-旋振筛|超声波振动筛|摇摆筛|筛分机-新乡市欧霖佳机械有限公司 | 英格索兰空压机_英格索兰空压机配件_英格索兰空压机维修—商天机械 | 频闪仪,便携式频闪仪厂家_灯管,频闪仪之父-杭州品拓电子技术有限公司 | 纸箱抗压测定仪|电脑测控耐破度仪|电脑抗张试验仪|杭州华翰仪器百科 | 挥发性有机物,VOCs在线监测系统,深圳市恒富盛科技有限公司 | 亚洲一区日韩一区欧美一区a,中文字幕乱妇无码AV在线,欧美日韩免费在线观看,国产精品一区二区三区免费,日韩精品免费一线在线观看,日韩一本在线,国产呦精品一区二区三区下载,国产日韩精品一区二区在线观看,欧美日韩高清一区二区三区,日韩在线免费观看视频,欧美日韩一区在线观看 | 皮革耐折试验机-消字率测试仪-面具全视野测试仪-东莞市誉扬检测仪器有限公司 | 磨粉机_上海磨粉机_雷蒙磨粉机_超细磨粉机_磨粉机价格-上海山卓重工机械有限公司 | 艺考培训-中影人教育 【官网】-中国艺考教育的引航者 | 真空清洗炉_真空煅烧炉_铸铝加热器-盐城市钰凯电器有限公司 | 箱式污泥采样器-全自动旋转振荡器-恒温石墨电热板-常州亿通分析仪器制造有限公司 | 世博磁力泵,耐腐蚀磁力泵,耐酸碱磁力泵,氟塑料磁力泵-苏州冠裕机电科技有限公司 | 停车场收费管理系统,通道闸系统,门禁系统,东莞停车场收费管理系统,东莞通道闸系统,-东莞市骄阳交通设备有限公司 | 日本国际高中_上海日本国际高中学校排名_日本国际高中留学课程_上海日语国际高中学校学费-上海工程技术大学国际多语种特色高中课程【官网】 | 吸污车|吸粪车|冷藏车|消防车|清障车|环卫垃圾车价格|湖北程力汽车集团厂家销售公司 | 新东方大学考试官网_考研/英语/雅思/托福/四六级/日语/韩语/教资在线网课官网 | 毛刷_毛刷辊_工业毛刷辊厂家_毛刷加工制造厂【丰汇刷业】 | 新零售策划-全渠道策划-品牌营销全案策划-上海韬慧管理咨询有限公司 | 上海浩斌信息科技有限公司RFID读写器,IC卡读卡器,手持机,数据采集终端,电力仓库管理软件开发,固定资产软件,纱管标签,试剂管理,RFID试剂柜,档案管理,档案柜,智能货架 | 文君阁-提供生活百科,日常生活健康小常识,生活小窍门,百科知识大全 | 企业资质代办-代理全国工商注册公司_公司转让_增值电信业务许可证新办续期-大通天成科技[gw] | 深圳网站建设-量身定制原创设计-专业网站建设公司【企术】 | 玉米加工机械_玉米加工设备_玉米深加工机械_玉米糁加工设备--滑县鑫丰粮油机械有限公司 | 无锡艾迅自动化科技ASCO电磁阀-dwyer/topworx代理-上泰仪表代理商 | 上饶建盛建设,建盛建设,上饶市建盛建设工程质量检测有限公司-房屋鉴定 | 真空机器人维修_晶圆机械手保养_半导体机械臂维修_面板机器人保养_AMHS改造-广州市广科智能技术有限公司 | 网带输送机_皮带_滚筒_链板输送机_不锈钢输送链条生产厂家-宁津县鸿昶机械设备有限公司 | 新房_二手房_别墅_全包装修-天美艺装饰【官网】-深圳装修公司 | 木马交互设计研究中心 ,专注于用户体验与人机交互设计 - 首页 | 拓普思(常州)智能科技有限公司-青少年无人机教育培训比赛课程加盟拓活力 | 实验反应釜,高压反应釜,玻璃反应釜,不锈钢反应釜-烟台招远松岭化工设备有限公司 | 家用油烟净化机_商用餐饮油烟净化器_工业油雾废气处理设备_深圳市宝篮环保 | 面粉加工设备-面粉加工机械-面粉机组-面粉磨粉机-面粉机成套设备-河南粮院机械制造有限公司 | 新乡市德诚机电制造有限公司_筛分设备_振动筛机_颗粒筛选机 | 球形钢支座,粘滞阻尼器,抗震球型钢支座,盆式橡胶支座,调谐质量阻尼器,屈曲约束支撑-衡水路泽科技 | 呼吸家官网|肺功能检测仪生产厂家|国产肺功能仪知名品牌|肺功能检测仪|肺功能测试仪|婴幼儿肺功能仪|弥散残气肺功能仪|肺功能测试系统|广州红象医疗科技有限公司|便携式肺功能仪|大肺功能仪|呼吸康复一体机|儿童肺功能仪|肺活量计|医用简易肺功能仪|呼吸康复系统|肺功能仪|弥散肺功能仪(大肺)|便携式肺功能检测仪|肺康复|呼吸肌力测定肺功能仪|肺功能测定仪|呼吸神经肌肉刺激仪|便携式肺功能 |