使用jquery+css实现瀑布流布局
虽然可以直接使用css实现瀑布流布局,但显示的方式有点问题,所以这儿就直接使用jquery+css来实现瀑布流布局,最终效果如下:

思路是通过将每个小块的position设置为relative,然后计算出在当前选择的列下应该上移的距离,然后设置div的top属性为该距离的负值,然后就达到了瀑布流的效果,代码如下:
<!DOCTYPE>
<html>
<head>
<title>vue demo</title>
<script src="js/jquery-3.2.1.js"></script>
<style>
body{
padding:0px;
margin:0px;
} .lv-masonry{
font-size:0px;
} .lv-masonry-2 .lv-masonry-item{
width:calc(50% - 2px - 10px);
} .lv-masonry-3 .lv-masonry-item{
width:calc(33.33% - 2px - 10px);
} .lv-masonry-4 .lv-masonry-item{
width:calc(25% - 2px - 10px);
} .lv-masonry-5 .lv-masonry-item{
width:calc(20% - 2px - 10px);
} .lv-masonry-item{
font-size:20px;
border:1px solid red;
display:inline-block;
margin:5px;
position:relative;
}
</style>
<script>
function Masonry(el){
this.el = el;
this.$el = $(el);
this.size = 0;
} Masonry.prototype = {
constructor:Masonry,
init: function(){
this.size = this.$el.find('.lv-masonry-item').length;
var heights = [{}];
for(var i=1; i<=this.size; i++){
var e = {};
var $e = this.$el.find('.lv-masonry-item:nth-child(' + i + ')')
e.height = $e.height();
e.top = $e.offset().top;
heights.push(e);
}
var index = this.$el.attr("class").indexOf("lv-masonry-");
if(index > -1){
var clazz = this.$el.attr("class").substr(index);
index = clazz.indexOf(" ");
if(index > -1){
clazz = clazz.substr(0, index);
}
clazz = clazz.substr(clazz.lastIndexOf("-") + 1);
var start = parseInt(clazz);
if(!isNaN(start)){
var minpos = 1;
var mintop = heights[1].top;
for(var i=2; i<=start; i++){
if(mintop > heights[i].top){
minpos = i;
mintop = heights[i].top;
}
}
for(var i=1; i<=start; i++){
if(minpos != i){
var $e = this.$el.find('.lv-masonry-item:nth-child(' + i + ')');
$e.css("top", -1 * (heights[i].top - mintop) + "px");
}
}
heights = [{}];
for(var i=1; i<=this.size; i++){
var e = {};
var $e = this.$el.find('.lv-masonry-item:nth-child(' + i + ')')
e.height = $e.height();
e.top = $e.offset().top;
heights.push(e);
}
for(var i=start+1; i<=this.size; i++){
var $e = this.$el.find('.lv-masonry-item:nth-child(' + i + ')');
var delta = 0;
var temp = i;
do{
delta += heights[temp-start].height + 10;
temp -= start;
}while(temp > start);
delta = heights[i].top - heights[temp].top - delta;
$e.css("top", -1 * delta + "px");
};
}
}
}
} $(function(){
var masonry = new Masonry('#masonry');
masonry.init();
});
</script>
</head>
<body>
<div class="lv-masonry lv-masonry-4" id="masonry">
<div class="lv-masonry-item" style="height:50px;">
1
</div>
<div class="lv-masonry-item" style="height:100px;">
2
</div>
<div class="lv-masonry-item" style="height:150px;">
3
</div>
<div class="lv-masonry-item" style="height:150px;">
4
</div>
<div class="lv-masonry-item" style="height:50px;">
5
</div>
<div class="lv-masonry-item" style="height:100px;">
6
</div>
<div class="lv-masonry-item" style="height:100px;">
7
</div>
<div class="lv-masonry-item" style="height:50px;">
8
</div>
<div class="lv-masonry-item" style="height:50px;">
9
</div>
<div class="lv-masonry-item" style="height:50px;">
10
</div>
</div>
</body>
</html>
masonry.html
代码中仅实现了两列、三列、四列和五列的布局,如果要增加其他的就添加类似如下的css代码即可:

在使用的时候要指定列,示例如下:

然后在jquery的loag方法中添加
var masonry = new Masonry('#masonry');
masonry.init();
便可使用瀑布流布局。
使用jquery+css实现瀑布流布局的更多相关文章
- jquery实现简单瀑布流布局(续):图片懒加载
# jquery实现简单瀑布流布局(续):图片懒加载 这篇文章是jquery实现简单瀑布流布局思想的小小扩展.代码基于前作的代码继续完善. 图片懒加载就是符合某些条件时才触发图片的加载.最常见的具体表 ...
- jquery实现简单瀑布流布局
jquery实现简单瀑布流布局 是开头都会说的原理 瀑布流布局有两种,一种是固定列,一种是非固定列.在此主要记述第一种的实现. 固定列的特征是:无论页面如何缩放,每行的总列数都一致. 一行4列的瀑布流 ...
- Ajax+json+jquery实现无限瀑布流布局
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- jQuery Wookmark Load 瀑布流布局实例演示
瀑布流布局非常适合大量图片的展示,一改过去裁剪图片尺寸统一的排版,每张图片都能完全展示,并错落有致,让人眼前一亮. 版本: jQuery v1.4.3+ jQuery Wookmark Load v1 ...
- 【CSS】瀑布流布局的两种方式:传统多列浮动和绝对定位布局
传统多列浮动 各列固定宽度,并且左浮动: 一列中的数据块为一组,列中的每个数据块依次排列即可: 更多数据加载时,需要分别插入到不同的列上: 优点: (1)布局简单,应该说没啥特别的难点: (2)不用明 ...
- 纯CSS实现瀑布流布局
https://www.w3cplus.com/css/pure-css-create-masonry-layout.html
- AJAX+json+jquery实现预加载瀑布流布局
宽度是一定的高度不定的瀑布流布局 也可以说是无缝拼图 当浏览器滚动到底部时候自动加载图片 加载的图片地址用json 在img.js里 ,还有正在加载动画是用 css3制作的 在ff等支持css3可以显 ...
- myWaterfall - jQuery瀑布流布局插件
myWaterfall - jQuery瀑布流布局插件 Demo http://jsfiddle.net/q3011893/p5k2ogy8/embedded/result,html,css,js/ ...
- jQuery Wookmark 瀑布流布局
瀑布流布局非常适合大量图片的展示,一改过去裁剪图片尺寸统一的排版,每张图片都能完全展示,并错落有致,让人眼前一亮. 版本: jQuery v1.4.3+ jQuery Wookmark Load v1 ...
随机推荐
- 实现首字母或拼音检索-sql语句方式
create function [dbo].[fn_GetPY](@str nvarchar(max),@type int) returns nvarchar(max) as begin ) begi ...
- day15_python_1124
03序列化模块 04加密模块 05 os sys 模块 06 collections 模块 # 03 序列化模块 # 网络传输数据:字节 bytes# 文件写入内容:bytes , str # dic ...
- 十年京东Java程序员的工作总结,写给迷茫中的你!
很多年前,刚刚从大学毕业的时候,很多公司来校招.其中最烂俗的一个面试问题是:“你希望你之后三到五年的发展是什么?”.我当时的标准回答是(原话):“成为在某一方面能够独当一面的技术专家“.后来经历了几家 ...
- 2.2使用urllib的简单传输
使用urllib传输文件 from urllib.request import urlopen filename = 'new_1.py' password = 'password' #如果设置密码 ...
- ionic3 使用swiper插件 实现轮播效果
由于app的更新迭代 我需要完成新版本设计图的开发 刚开始就遇到一个问题 首页的banner图需要实现某种效果 而ionic3自带的轮播图效果怎么改都改不到我想要的效果 效果图如下 自动播放 不断 ...
- 马凯军201771010116《面向对象程序设计(java)》第四周学习总结
第一部分:理论知识学习部分 第四章 1.类与对象的基础概念. 对象:即数据,对象有三个特性:行为 .状态.标识. 类是对象,事物的描述和抽象,是具有相同属性和行为的对象集合.对象则是该类事物的实例. ...
- 在eclipse中启动java程序的时候,每次都会在一个未设置断点的源码里面,卡断点
可以通过取消这个勾选框,来阻止代码在未设置断点的地方停止 具体位置在:Preferences--Java--Debug
- Tex_Err:缺失wlscirep.cls
使用期刊模板编译时,需要'.cls'一类格式文件支持.从Overleaf上直接Copy代码到本地,发现自己的tex运行时会报错: ! LaTeX Error: File `wlscirep.cls' ...
- 剑指Offer 30. 连续子数组的最大和 (数组)
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- acrgis 解决矢量转栅格分辨率过大造成连续值变离散且出现空白
目标:解决北京河流矢量polygon 转栅格的问题 设置栅格大小和影像一致30*30----结果发现,因为cell过大,原本连续的是矢量面变得不连续了,特别细的河流会出现间断(如下图所示): 1号 网 ...