备案 控制台
开发者社区 开发与运维 文章 正文

前端(五):实现页面的瀑布流式布局

简介: 实现页面的瀑布流式布局

效果、原理

image.png

源码

* {
   
   
    padding: 0;
    margin: 0;
    box-sizing: border-box;
    outline: none;
}

html,
body {
   
   
    width: 100%;
    height: 100%;
    position: relative;
    overflow: hidden;
}

#app {
   
   
    position: relative;
    width: 100vw;
    height: 100vh;
    overflow: auto;
}

.pic-item {
   
   
    position: absolute;
    border: 1px solid #000;
}
<div id="app">
    <!-- <img class="pic-item" :src="item" width="200"> -->
</div>
// 添加img标签
const root = document.getElementById('app');
for (let i = 1; i <= 20; i++) {
   
   
    const color = ()=>{
   
   
        let c = '0123456789abcdef'.split('');
        return c[Math.floor(Math.random(0, 1) * 15)];
    }
    let h = Math.floor(Math.random() * 500) + 50;
    let img = document.createElement("img");
    img.className = 'pic-item';
    img.width = 200;
    img.src = `https://dummyimage.com/200x${h}/${color()}${color()}${color()}/fff?text=200x${h} ${i}`;
    root.appendChild(img);
}

// 监听页面当前加载状态
document.onreadystatechange = () => {
   
   
    // 页面加载完成
    if (document.readyState === 'complete') {
   
   

        // 瀑布流
        const picList = document.getElementsByClassName('pic-item');

        // 单张图片宽度
        const w = 200;
        // 定义列数
        const col = 5;

        // 获取第一列图片高度集合
        let heightList = [...picList].slice(0, col).map(el => el.offsetHeight);
        console.log(`第一行 ${
     
     col} 个 图片标签的高度`, heightList);

        // 循环标签
        for (let i = 0; i < picList.length; i++) {
   
   

            // 当前标签
            let ele = picList[i];

            // 第一行(不做处理按原样顺序定位输出)
            if (i < col) {
   
   
                // 修改定位
                ele.style.top = '0px';
                ele.style.left = `${
     
     w * i}px`;
            }

            // 其他行(做处理,按每次获取到的最低高度进行样式定位)
            else {
   
   
                // 找出最小高度
                let minHeight = Math.min.apply(null, heightList);
                // 判断最小高度在数组中的下标(第几列的图片)
                let j = heightList.indexOf(minHeight);

                // 修改定位放到最小的标签的位置的下方
                ele.style.top += `${
     
     minHeight}px`;
                ele.style.left = `${
     
     w * j}px`;

                // 修改定位(修改最小的那个高度为加上当前元素的高度,用于下次循环时判断出另一个最小高度)
                heightList[j] += ele.offsetHeight;
                console.log('修改最小高度后新的高度集合', heightList);
            }

        }

    }
}
ProsperLee
目录
相关文章
yma16
|
12天前
|
前端开发 数据可视化 JavaScript
前端vite+vue3——可视化页面性能耗时指标(fmp、fp)
前端vite+vue3——可视化页面性能耗时指标(fmp、fp)
yma16
36 6
游客avlxf7b6fdona
|
4月前
|
缓存 前端开发 JavaScript
如何优化前端页面性能
前端性能优化是网站开发中非常重要的一部分,它直接关系到用户体验和网站的流量以及排名。本文将介绍一些优化前端页面性能的方法,包括减少HTTP请求、压缩代码、使用CDN等。
游客avlxf7b6fdona
26 0
景天科技苑
|
8天前
|
机器学习/深度学习 前端开发 数据可视化
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
景天科技苑
18 0
cuicuicuic
|
21天前
|
存储 前端开发 API
对象存储OSS产品常见问题之获取文件结构并在前端页面展示如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
cuicuicuic
26 0
No8g攻城狮
|
7月前
|
缓存 前端开发 JavaScript
【前端用法】jquery获取当前页面的URL信息
【前端用法】jquery获取当前页面的URL信息
No8g攻城狮
54 0
遇事问春风乄
|
3月前
|
存储 前端开发 JavaScript
【JavaEE初阶】 博客系统项目--前端页面设计实现
【JavaEE初阶】 博客系统项目--前端页面设计实现
遇事问春风乄
31 1
jerrywangsap
|
7月前
|
前端开发 安全 JavaScript
关于前端页面测试和抵御 clickjacking attack 的一些方法
关于前端页面测试和抵御 clickjacking attack 的一些方法
jerrywangsap
52 0
会敲代码的_TT
|
3月前
|
存储 前端开发 安全
无限连接:前端跨页面通信的实现与应用
在前端开发中,有时我们需要在不同的页面之间进行数据传递和交互。这种场景下,前端跨页面通信就显得尤为重要。前端跨页面通信是指在不同的页面之间传递数据、发送消息以及实现页面间的交互操作。本文将详细介绍前端跨页面通信的属性、应用场景以及实现方法,并提供一些代码示例和引用资料,帮助读者深入了解并应用这一重要的技术。
会敲代码的_TT
60 2
前端技术栈
|
4月前
|
数据采集 前端开发 安全
禁止别人调试自己的前端页面代码
禁止别人调试自己的前端页面代码
前端技术栈
26 1
陌陌谣
|
4月前
|
移动开发 监控 前端开发
HTML5与CSS3教学:美化员工行为监控软件前端页面的代码技巧
在当今信息时代,企业对员工行为的监控成为了一项必不可少的工作。而员工行为监控软件作为一种高效的管理工具,其前端页面的设计和美化显得尤为重要。本文将介绍如何利用HTML5和CSS3技术,优雅地美化员工行为监控软件前端页面的代码技巧。
陌陌谣
219 0

热门文章

最新文章

  • 1
    构建高效响应式Web界面:现代前端框架的比较
  • 2
    Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
  • 3
    前端最常见的JS面试题大全
  • 4
    layui:从崛起到蜕变,前端框架的华丽篇章
  • 5
    使用机器学习优化前端用户体验
  • 6
    前端代码整洁与规范之CSS篇
  • 7
    探索前端开发中的新趋势:WebAssembly 技术应用与展望
  • 8
    如何使用浏览器调试前端代码?
  • 9
    常见的前端加密方式有哪些?运用场景有哪些?
  • 10
    uniapp上传图片 前端以及java后端代码实现
  • 1
    借助chat-web前端开源项目搭建属于自己的ChatGPT镜像站
    146
  • 2
    构建高性能Web应用:前端性能优化的关键策略与实践
    65
  • 3
    构建响应式Web界面:现代前端开发的最佳实践
    46
  • 4
    前端开发中的响应式设计与移动优先原则
    30
  • 5
    探索现代Web应用中的微前端架构
    32
  • 6
    前端性能优化实践:从理论到实际操作
    33
  • 7
    构建高效前端项目:模块化与组件化策略
    34
  • 8
    前端发展趋势:WebAssembly、PWA 和响应式设计
    31
  • 9
    前端开发新趋势:Web3、区块链和虚拟现实
    42
  • 10
    架构的未来:微前端与微服务的融合
    68
  • 相关课程

    更多
  • 网站性能前端监控课程
  • 移动Web前端开发
  • Ajax 前端开发入门与实战
  • 零基础学前端HTML+CSS
  • 前端开发CSS基础
  • 前端开发框架Bootstrap使用教程
  • 相关电子书

    更多
  • Vue.js 在前端服务化上的探索与实践
  • 阿里文娱大前端技术实践
  • 前端代码是怎样智能生成的
  • 相关实验场景

    更多
  • 前端开发基础3:CSS3常见显示属性
  • 前端开发基础6:Node.js和LESS预编译工具
  • 前端开发基础2:VS Code和Edge的联动开发
  • 前端开发基础1:前端开发环境的安装和配置
  • 下一篇
    部署LAMP环境(Alibaba Cloud Linux 3)

    代做工资流水公司海口薪资流水单办理盐城办理公司流水洛阳打银行流水中山代办入职银行流水泰州工作收入证明打印肇庆企业对公流水代开盐城入职工资流水价格常州入职银行流水银川查自存银行流水菏泽个人工资流水 办理沈阳打印房贷银行流水济南房贷工资流水 价格荆州贷款银行流水费用上饶入职工资流水代开深圳房贷工资流水咸阳制作背调流水大庆流水单打印许昌流水查询淮安办薪资流水单蚌埠代办消费贷流水珠海做企业对公流水漳州在职证明办理上饶做购房银行流水大庆打印转账银行流水蚌埠对公账户流水代办苏州开房贷银行流水大连工资流水账单代做杭州流水单报价大连代办薪资银行流水咸阳公司银行流水代开香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

    代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化