1.什么是瀑布流

为什么要使用瀑布流:由于图片尺寸的大小不同,我们为了用最合适的比例来展示图片,就需要让图片自己去确定最终的高度。但是图片自定义高度会使得每一项的高度不一致而使页面显得混乱,故我们可以使用瀑布流来确定元素的定位位置。

瀑布流的定义:元素自判断显示区域中,那一列的高度最低,则在那一列显示。

2.瀑布流具体原理

(1). 根据数据库数据创建每一个图片卡片

    data.forEach(element => {// 【创建该项节点】let model = $(`<div class="item"><img src="data:images/pic/${element['id']}.jpg" class="bigImg" /><div class="bottom_box"><p>${element['text']}</p><div class="user_box"><div class="left"><img src="data:images/touxiang/${element['id']}.jpg" class="user_img" /><span class="username">${element['uname']}</span></div><div class="right"><img src="data:images/heart.png" class="heart" /><span class="num">${element['collect']}</span></div></div></div></div>`);$('.box').append(model);})

(2). 对每一个图片卡片进行布局

// 由于代码执行顺序问题,刚刚创建完的节点还未加载 img 图片// 如果直接设置布局,达不到想要的效果window.onload = function () {// 【一.准备工作】// 1.1-设置列数const column = 5;// 1.2-定义每个项的间距const gap = 18;// 1.3-定义一个数组保存每列高度,初始化为 0let arrHeight = [];for (let i = 0; i < column; i++) {arrHeight.push(0)}// 【二.遍历每项】$('.item').each((index, model) => {// 2.1- 判断每列高度最小值 及其 索引// 求最小值let minHeight = Math.min(...arrHeight);// 最小值索引let minIndex = $.inArray(minHeight, arrHeight);// 2.2- 设置该项定位位置 top - left$(model).css({top: minHeight + gap,left: ($(model).outerWidth() + gap) * minIndex,})// 2.3- 更新该添加列的高度值arrHeight[minIndex] = minHeight + gap + $(model).outerHeight();});}

3.源码展示

  • 布局

  • HTML部分

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="./css/init.css">
</head><body><div class="box"></div>
</body>
<script src="./js/jquery.min.js"></script>
<script src="./js/data.js"></script>
<script src="./js/element.js"></script></html>
  • CSS部分
*{margin: 0;padding: 0;
}
img{vertical-align: bottom;
}
.box{width: 1180px;margin:50px auto;position: relative;
}
.box .item{width: 220px;border:1px solid #ccc;border-radius: 8px;overflow: hidden;position: absolute;left: 0;top: 0;
}
.box .item .bigImg{width: 100%;
}
.box .item .bottom_box{height: 80px;padding:15px;
}
.box .item .bottom_box .user_box{margin-top: 15px;
}
.box .item .bottom_box .user_box .left{float: left;
}
.box .item .bottom_box .user_box .right{float: right;
}
.box .item .bottom_box .user_box .user_img{width: 30px;height: 30px;border-radius: 50%;margin-right: 10px;vertical-align: middle;
}
.box .item .bottom_box .user_box .username{font-size:12px;color:#555555;
}
.box .item .bottom_box .user_box .heart{height: 16px;vertical-align: middle;
}
.box .item .bottom_box .user_box .num{font-size:12px;color:#555555;
}.box .item::after{width: 100%;height: 100%;background-color: rgba(0,2,4,.2);position: absolute;top: 0;left: 0;border-radius: 8px;content: "";cursor: pointer;display: none;
}
.box .item:hover::after{display:block;
}
.more{color:#ff2741;text-align: center;height: 100px;line-height: 100px;font-weight: bold;cursor: pointer;
}
  • JQ插件请自行下载
  • JS-data部分
let data = [{ id: '01', text: '拥有一台宾利GT,如何拍,才不会被说炫富?', uname: '金英焕', collect: '102' },{ id: '02', text: '												

瀑布流实现原理( jQuery 实现 )相关推荐

  1. 动态瀑布流网页布局 Jquery 源码

    动态瀑布流网页布局jQuery代码,效果超酷,自适应网页宽度,动态缩略图排列效果, 本代码包含两种演示效果, 一种是缩略图布局效果 一种是文字布局效果 下载地址: http://download.cs ...

  2. jQuery实现响应式瀑布流效果(jQuery+flex)

            瀑布流原理:是一种常见的网页布局方式,它的特点是将内容以多列的形式呈现,每一列的内容高度不固定,根据内容的大小自适应调整,从而形成了像瀑布一样的流动效果. 瀑布流的实现原理涉及到数据加 ...

  3. 堆糖瀑布流完整解决方案(jQuery)

    2010年堆糖创办以来,网站界面经历过3-5次重大改版,logo也曾更换过两次,早期蓝红相间三个圈的logo恐怕很少有人记得了.与此同时,前端 js 框架也在默默的更新换代.最早堆糖上线时,js 采用 ...

  4. waterfall-Jquery瀑布流插件,Jquery瀑流式插件

    瀑布流插件布局在目前貌似很火爆,因为自己用jquery插件比较多,便萌生了把瀑布流插件实现的想法,图片就借用迅雷UED上的那些美图吧. 预览地址:http://www.sitejs.cn/code/d ...

  5. 自己用jQuery写一个瀑布流

    自己用jQuery写一个瀑布流 前言 这个月一直在忙工作.一直没有机会学习新的知识.前两天,突然想写一个瀑布流代码.倒不是找不到瀑布流代码.而是我想自己练练脑子. 首先,先考虑思路.所有的图片,全部采 ...

  6. masonry ajax瀑布流,jquery.masonry瀑布流插件的4个使用步骤

    解释:很简单,就是把下载之后的脚本文件嵌入到你想使用2.瀑布流布局样式代码 .container-fluid { padding: 20px; } .box { margin-bottom: 20px ...

  7. 网页瀑布流效果实现的几种方式

    前言 like a mountain that is in our path,wo cannot complain that it is there,we simply have to climb i ...

  8. AJAX异步实现简单的瀑布流

    传统瀑布流布局ul-li,需要先设定显示几列,每列是一个li,需要左浮动并指定宽度,li里面的布局也要先布局好,主要是要定宽,高度自动:然后通过ajax异步,从数据库中得到数据,遍历后将数据插入最矮的 ...

  9. 瀑布流代码PHP,thinkPHP实现瀑布流的方法

    本文实例讲述了thinkPHP实现瀑布流的方法.分享给大家供大家参考.具体分析如下: 很多人都想做瀑布流的效果,这里告诉大家官网使用的方法,首先要下载瀑布流的插件jquery.masonry.min. ...

最新文章

  1. 聊聊iOS开发中耳机的那点事(监听耳机拔插、耳机线控)-b
  2. libopencv_core.so: file not recognized: File format not recognized
  3. 【Android 高性能音频】Oboe 播放器开发 ( 为 OpenSL ES 配置参数以获得最佳延迟 | Oboe 音频流 | Oboe 音频设备 )
  4. 给书配代码-电力经济调度(4):有功与辅助服务联合经济调度
  5. 请看:我是如何在SQLServer中处理每天四亿三千万记录的
  6. React开发(117):ant design 新方式
  7. 红米k30pro工程测试代码_3299起?红米K30Pro官宣3.24发 对比米10 追悼会来了?
  8. Python常用网站
  9. python布局管理数据_利用python创建窗口-布局管理器(五)
  10. MYSQL主从同步(主库服务器为Linux,从库为Windows)
  11. SSM(Spring+springMVC+MyBatis)框架-springMVC实现图片上传
  12. IDEA集成有道翻译插件/maven帮助插件/mybatis插件
  13. 软件需求,概要设计,详细设计(文档)怎么做,做什么?
  14. JAVA后端调用微信支付“统一下单”接口实现微信二维码扫码支付
  15. DHCP中继 ||| 四种通信方式(单播+组播+广播+任播)
  16. 互联网周刊2022汽车智能服务企业TOP50
  17. matlab右下方箭头,matlab绘制箭头arrow
  18. oracle修改表的owner,Oracle中改变表的Owner和tablespace
  19. Vim使用全指南 (环境配置,插件推荐,美化) (C++,Python,MarkDown,R...)
  20. xxl-job的学习使用

热门文章

  1. 利用ffmpeg录制rtsp流的方法总结(一)
  2. 两大技巧教你轻松应对IB数学
  3. 计算机远程桌面连接如何设置,电脑的远程桌面功能不知道怎么设置_远程桌面连接设置方法 - 驱动管家...
  4. Python - *args and **kwargs
  5. BFT-DPoS共识算法讲解
  6. Linux命令学习法
  7. 监督分类-支持向量机分类法
  8. 一路向西——忆记2015
  9. 三菱FX3U 485BD与3台施耐德ATV 71变频器通讯程序
  10. 2020年了,大数据之父舍恩伯格又有什么新预测?