瀑布流的实现纯CSS实现Jquery实现
瀑布流的实现
注:本文部分图片自百度下载,如有侵权,联系删图。
首先,选择几张图片布局到HTML内容中。HTML如下所示。
<div class="wrapper">
<div class="item"><img src="img/1.jpg" height="auto"/></div>
<div class="item"><img src="img/2.jpg" height="auto"/></div>
<div class="item"><img src="img/3.jpg" height="auto"/></div>
<div class="item"><img src="img/4.jpg" height="auto"/></div>
<div class="item"><img src="img/5.jpg" height="auto"/></div>
<div class="item"><img src="img/6.jpg" height="auto"/></div>
<div class="item"><img src="img/7.jpg" height="auto"/></div>
<div class="item"><img src="img/8.jpg" height="auto"/></div>
<div class="item"><img src="img/9.jpg" height="auto"/></div>
<div class="item"><img src="img/10.jpg" height="auto"/></div>
<div class="item"><img src="img/11.jpg" height="auto"/></div>
<div class="item"><img src="img/12.jpg" height="auto"/></div>
<div class="item"><img src="img/13.jpg" height="auto"/></div>
<div class="item"><img src="img/14.jpg" height="auto"/></div>
<div class="item"><img src="img/15.jpg" height="auto"/></div>
</div>
纯CSS实现
纯CSS实现较为简单,主要代码为设置列数和间距的两行。
/* 将边距设为0 */
*{
margin:;
padding:;
border: none;
}
.wrapper{
width: auto;
height: auto;
position: relative;
margin: 0 auto;
/* 设置列数和间距 */
column-count:;
column-gap:;
}
.item{
position:relative;
width: 100%;
height: auto;
box-sizing: border-box;
padding: 2px;
}
.item img{
display: block;
width: 100%;
cursor: pointer;
border-radius: 5px;
}
.item img:hover{
opacity: 0.8;
}
Jquery实现
有bug 的写法
定义一个瀑布流方法:
function waterfall(element,child,padding) {
var child = $(child) || $('.item');
var wrap = $(element) || $('.wrapper');
var padding = padding || 25;
// 宽度,所有元素宽度一致
var itemW=$(".item").outerWidth(true);
// 可容纳总列数
var colNum=Math.floor(wrap.outerWidth(true)/child.outerWidth(true));
console.log(colNum);//
// 初始化第一列的top和left值
var posi=new Array(colNum);
$.each(posi,(i)=>{
posi[i]=new Object();
posi[i].top = padding;
posi[i].left = padding + i * itemW;
}) // 每个元素所处列数
var eleCol=[];
//循环图片列表
child.each(function (i) { if ((i+1)% colNum == 0) {
eleCol[i] = colNum;
}else{
eleCol[i] = (i+1) % colNum;
}
var sub = eleCol[i]-1;
var top = posi[sub].top+'px';
var left = posi[sub].left+'px';
// 设置每个元素的位置
$(this).css({"position":"absolute","top" :top,"left" : left});
// 每遍历完一次,重置top值
posi[sub].top += $(this).outerHeight(true);
})
}该方法原理图如图所示:
这是按照顺序,根据上行图片大小对定位加以调整的方式布局的。
但是,这种方法会造成空行。如图:
这是由于第一列某张图片过于大的缘故。
因此,在做瀑布流时,应该根据已布局好的元素的高度进行剩余元素的布局。就是说,比如第一行元素已经布局完成,第二行元素应该先选择第一行元素中,高度最小的那个元素所在列进行插入。这样,才能保证不会出现某一列太长或者某一列过短的现象。
根据以上分析,我们得到,实现瀑布流的核心其实是,找出图片高度最小的一列,并在此插入图片。
改进后的瀑布流方法:
function waterfall(element,child) {
var child = $(child) || $('.item');
var wrap = $(element) || $('.wrapper');
// 宽度,所有元素宽度一致
var itemW=$(".item").outerWidth(true);
// 可容纳总列数
var colNum=Math.floor(wrap.outerWidth(true)/child.outerWidth(true));
console.log(colNum);//
// 定义列高度数组并初始化
var itemH = new Array(colNum);
$.each(itemH,(i)=>{
itemH[i]=0;
})
//循环图片列表
child.each(function (i) {
// 定义最小高度和对应的index并初始化
var minHeight = itemH[0];
var minIndex = 0;
console.log("最初最小高度为:"+minHeight+"下标为:"+minIndex);
// 存储本次循环对象的高度
var thisH = $(this).outerHeight(true);
$.each(itemH,(i)=>{
if (itemH[i] < minHeight) {
minHeight = itemH[i];
minIndex = i;
}
console.log("比较后最小高度为:"+minHeight+"下标为:"+minIndex);
})
var sub = minIndex;
var top = minHeight;
var left = minIndex * itemW;
// 设置每个元素的位置
$(this).css({"position":"absolute","top" :top,"left" : left});
// 每遍历完一次,重置列高度值
itemH[sub] += thisH;
console.log("itemH值:"+itemH[sub]);
})
}如图所示:
代码实现链接: https://github.com/jiujiu12/web-practice/tree/master/%E7%80%91%E5%B8%83%E6%B5%81%E5%AE%9E%E7%8E%B0
瀑布流的实现纯CSS实现Jquery实现的更多相关文章
- 纯CSS的jQuery的气泡提示组件
1. [代码][JavaScript]代码 //调用说明//$(selector).bub($(selector) | string[, options]);//示例: $('#demo1').bub ...
- 分享:纯 css 瀑布流 和 js 瀑布流
分享一次纯 css 瀑布流 和 js 瀑布流 纯 css 写瀑布流 1.multi-columns 方式: 通过 Multi-columns 相关的属性 column-count.column-ga ...
- Jquery简单瀑布流代码示例
最近很多网站都采用瀑布流风格设计,感觉挺有个性的,比较合适做图片类型的网站,没事仿开心网做一个瀑布流示例. 需要用到Jquery,jquery.masonry.min.js <!DOCTYPE ...
- 面向对象js瀑布流效果
index.html <!doctype html><html lang="en"> <head> <!--网站编码格式,UTF-8 国 ...
- 前端-PC端瀑布流【10张图】
.HTML 利用封装的 jquerywaterfall.js 方法 完成 <!DOCTYPE html> <html lang="en"> <head ...
- 纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!
前两天写的文章<纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!>受到很多网友的喜爱,今天特别推出姊妹篇<纯手工打造漂亮的瀑 ...
- [置顶] 纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!
前两天写的文章<纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!>受到很多网友的喜爱,今天特别推出姊妹篇<纯手工打造漂亮的瀑 ...
- 详解纯css实现瀑布流(multi-column多列及flex布局)
瀑布流的布局自我感觉还是很吸引人的,最近又看到实现瀑布流这个做法,在这里记录下,特别的,感觉flex布局实现瀑布流还是有点懵的样子,不过现在就可以明白它的原理了 1.multi-column多列布局实 ...
- 关于瀑布流的布局原理分析(纯CSS瀑布流与JS瀑布流)
瀑布流 又称瀑布流式布局,是比较流行的一种网站页面布局方式.即多行等宽元素排列,后面的元素依次添加到其后,等宽不等高,根据图片原比例缩放直至宽度达到我们的要求,依次按照规则放入指定位置. 为什么使用瀑 ...
随机推荐
- Flutter学习笔记(36)--常用内置动画
如需转载,请注明出处:Flutter学习笔记(36)--常用内置动画 Flutter给我们提供了很多而且很好用的内置动画,这些动画仅仅需要简单的几行代码就可以实现一些不错的效果,Flutter的动画分 ...
- 状压DP 从TSP问题开始入门哦
一开始学状压DP难以理解,后来从TSP开始,终于入门了nice!!!! 旅行商问题 : 给定n个城市和两两相互的距离 ,求一条路径经过所有城市,并且路径达到最下仅限于; 朴树想法: 做n个城 ...
- android java层通过jni加载使用第三方的so库
1.例如我们自己编译一个so库,我们的其他模块要加载如何操作了 首先在c盘新建立一个文件夹sb,在sb下面新建立一个文件夹jni,如果你要使用ndk编译so库,必须需要有jni目录 2.在jni目录下 ...
- 【Spring】AOP的代理默认是Jdk还是Cglib?
菜瓜:你觉得AOP是啥 水稻:我觉得吧,AOP是对OOP的补充.通常情况下,OOP代码专注功能的实现,所谓面向切面编程,大多数时候是对某一类对象的方法或者功能进行增强或者抽象 菜瓜:我看你这个理解就挺 ...
- 使用spring-test时报错
java.lang.NoClassDefFoundError: org/springframework/core/annotation/MergedAnnotations$SearchStrategy ...
- Redis 的基本数据类型 和 基础应用场景
Redis 的基础应用场景 获取中奖用户ID,随机弹出之后集合中就不存在了[set] 存储活动中中奖的用户ID,保证同一个用户不会中奖两次[set] 存储粉丝列表,value 为粉丝的用户ID,sco ...
- yqq命令
用 apt-get install 安装时 ,会有一个提问,问是否继续,需要输入 yes.使用 yqq 的话,就没有这个提问了,自动 yes . 例如下面的更新和安装nginx: apt-get -y ...
- cbitmap 获取RGB
CBitMap的用法 MFC提供了位图处理的基础类CBitmap,可以完成位图(bmp图像)的创建.图像数据的获取等功能.虽然功能比较少,但是在对位图进行一些简单的处理时,CBitmap类还是可以 ...
- Redis系列(九):数据结构Hash源码解析和HSET、HGET命令
2.源码解析 1.相关命令如下: {"hset",hsetCommand,,"wmF",,NULL,,,,,}, {"hsetnx",hse ...
- UVA - 11300 Spreading the Wealth(数学题)
UVA - 11300 Spreading the Wealth [题目描述] 圆桌旁边坐着n个人,每个人有一定数量的金币,金币的总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金 ...