使用jquery+css实现瀑布流布局

 

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

    

思路是通过将每个小块的position设置为relative,然后计算出在当前选择的列下应该上移的距离,然后设置div的top属性为该距离的负值,然后就达到了瀑布流的效果,代码如下:

  1 <!DOCTYPE>
  2 <html>
  3 <head>
  4     <title>vue demo</title>
  5     <script src="js/jquery-3.2.1.js"></script>
  6     <style>
  7         body{
  8             padding:0px;
  9             margin:0px;
 10         }
 11         
 12         .lv-masonry{
 13             font-size:0px;
 14         }
 15 
 16         .lv-masonry-2 .lv-masonry-item{
 17             width:calc(50% - 2px - 10px);
 18         }
 19 
 20         .lv-masonry-3 .lv-masonry-item{
 21             width:calc(33.33% - 2px - 10px);
 22         }
 23 
 24         .lv-masonry-4 .lv-masonry-item{
 25             width:calc(25% - 2px - 10px);
 26         }
 27 
 28         .lv-masonry-5 .lv-masonry-item{
 29             width:calc(20% - 2px - 10px);
 30         }
 31 
 32         .lv-masonry-item{
 33             font-size:20px;
 34             border:1px solid red;
 35             display:inline-block;
 36             margin:5px;
 37             position:relative;
 38         }
 39     </style>
 40     <script>
 41         function Masonry(el){
 42             this.el = el;
 43             this.$el = $(el);
 44             this.size = 0;
 45         }
 46 
 47         Masonry.prototype = {
 48             constructor:Masonry,
 49             init: function(){
 50                 this.size = this.$el.find('.lv-masonry-item').length;
 51                 var heights = [{}];
 52                 for(var i=1; i<=this.size; i++){
 53                     var e = {};
 54                     var $e = this.$el.find('.lv-masonry-item:nth-child(' + i + ')')
 55                     e.height = $e.height();
 56                     e.top = $e.offset().top;
 57                     heights.push(e);
 58                 }
 59                 var index = this.$el.attr("class").indexOf("lv-masonry-");
 60                 if(index > -1){
 61                     var clazz = this.$el.attr("class").substr(index);
 62                     index = clazz.indexOf(" ");
 63                     if(index > -1){
 64                         clazz = clazz.substr(0, index);
 65                     }
 66                     clazz = clazz.substr(clazz.lastIndexOf("-") + 1);
 67                     var start = parseInt(clazz);
 68                     if(!isNaN(start)){
 69                         var minpos = 1;
 70                         var mintop = heights[1].top;
 71                         for(var i=2; i<=start; i++){
 72                             if(mintop > heights[i].top){
 73                                 minpos = i;
 74                                 mintop = heights[i].top;
 75                             }
 76                         }
 77                         for(var i=1; i<=start; i++){
 78                             if(minpos != i){
 79                                 var $e = this.$el.find('.lv-masonry-item:nth-child(' + i + ')');
 80                                 $e.css("top", -1 * (heights[i].top - mintop) + "px");
 81                             }
 82                         }
 83                         heights = [{}];
 84                         for(var i=1; i<=this.size; i++){
 85                             var e = {};
 86                             var $e = this.$el.find('.lv-masonry-item:nth-child(' + i + ')')
 87                             e.height = $e.height();
 88                             e.top = $e.offset().top;
 89                             heights.push(e);
 90                         }
 91                         for(var i=start+1; i<=this.size; i++){
 92                             var $e = this.$el.find('.lv-masonry-item:nth-child(' + i + ')');
 93                             var delta = 0;
 94                             var temp = i;
 95                             do{
 96                                 delta += heights[temp-start].height + 10;
 97                                 temp -= start;
 98                             }while(temp > start);
 99                             delta = heights[i].top - heights[temp].top - delta;
100                             $e.css("top", -1 * delta + "px");
101                         };
102                     }
103                 }
104             }
105         }
106         
107         $(function(){
108             var masonry = new Masonry('#masonry');
109             masonry.init();
110         });
111     </script>
112 </head>
113 <body>
114     <div class="lv-masonry lv-masonry-4" id="masonry">
115         <div class="lv-masonry-item" style="height:50px;">
116         1
117         </div>
118         <div class="lv-masonry-item" style="height:100px;">
119         2
120         </div>
121         <div class="lv-masonry-item" style="height:150px;">
122         3
123         </div>
124         <div class="lv-masonry-item" style="height:150px;">
125         4
126         </div>
127         <div class="lv-masonry-item" style="height:50px;">
128         5
129         </div>
130         <div class="lv-masonry-item" style="height:100px;">
131         6
132         </div>
133         <div class="lv-masonry-item" style="height:100px;">
134         7
135         </div>
136         <div class="lv-masonry-item" style="height:50px;">
137         8
138         </div>
139         <div class="lv-masonry-item" style="height:50px;">
140         9
141         </div>
142         <div class="lv-masonry-item" style="height:50px;">
143         10
144         </div>
145     </div>
146 </body>
147 </html>
masonry.html

 

代码中仅实现了两列、三列、四列和五列的布局,如果要增加其他的就添加类似如下的css代码即可:

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

然后在jquery的loag方法中添加

var masonry = new Masonry('#masonry');
masonry.init();

便可使用瀑布流布局。

 

转载于:https://www.cnblogs.com/lvniao/p/9123040.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

geek_How-To Geek正在寻找安全作家

geekThink you have the perfect combination of geek knowledge and writing skills? We’re looking for an experienced, security-focused writer to join our team. 认为您将怪胎知识和写作技能完美结合了吗&#xff1f; 我们正在寻找经验丰富&#xff0c;注重安全性的作…

AAC 文件解析及解码流程

OUTLINE&#xff1a; &#xff0a; AAC概述 &#xff0a; AAC规格简述 &#xff0a; AAC特点 &#xff0a; AAC音频文件解析 ——ADIF&#xff06;ADTS格式 ——ADIF&#xff06;ADTS头信息 ——ADIF&#xff06;ADTS数据信息 ——AAC文件处理流程 &#xff0a; AAC解码流程…

IntelliJ IDEA代码分屏显示

转载于:https://www.cnblogs.com/EasonJim/p/9124809.html

vscode重置应用程序_如何在Windows 10上重置应用程序的数据

vscode重置应用程序With Windows 10’s Anniversary Update, you can now reset an app’s data without actually uninstalling and reinstalling the app. This can fix problems when an app has gotten into a bad state, or just quickly restore an app to its default s…

程序报错与提示

2019独角兽企业重金招聘Python工程师标准>>> 我们在开发中, 为了程序的规范性,把报错级别,调的比较高NOTICE级别的也报出来,有助于我们快速定位错误和代码规范&#xff0c;但是,在产品上线后,网站运营过程中,就不宜报这么多错. 1:这种错误给客户的印象不好 2:在报错…

dock怎么自定义_如何自定义和调整Mac的Dock

dock怎么自定义The macOS dock normally appears at the bottom of your screen, but it doesn’t have to. The dock is customizable in quite a few ways you might not be aware of, especially if you’re a new Mac user. macOS坞站通常显示在屏幕底部&#xff0c;但不是…

ios 轻扫手势_轻扫即可快速删除iOS计算器中的数字

ios 轻扫手势iOS’ built-in calculator is a basic, simple-to-use calculator that’s very handy for doing some quick calculations, such as calculating the tip on your restaurant bill. It’s also useful for longer, more complicated calculations. However, ther…

游戏安全资讯精选 2017年第十期 英国彩票网遭遇DDoS攻击,中断90分钟 DNSMASQ多高危漏洞公告 阿里云协助警方破获国内最大黑客攻击案,攻击峰值690G...

【本周游戏行业DDoS攻击态势】 国庆期间&#xff0c;针对游戏行业的DDoS攻击放缓&#xff0c;攻击者也在放“小长假”&#xff0c;10月8日超过500G的攻击可视作攻击猛烈度恢复的表现。 【游戏安全动态】 英国彩票网遭遇DDoS攻击&#xff0c;中断90分钟 点击查看原文 点评&#…

02 jmeter 简单发送http请求

一、新建http请求模板1、测试计划2、右键Threads(users)-线程组3、右键sample-http请求4、右键监听器-查看结果树5、右键监听器-查看聚合报告二、编辑http请求内容三、设置并发用户1&#xff1a;虚拟用户数&#xff1b; 2&#xff1a;加载用户时间&#xff1b;3、每个用户循环次…

java调用siri 语言_如何更改Siri的声音,口音,性别和语言

java调用siri 语言Most of us are familiar with Siri as an American female voice. What you may not realize is that you can actually change Siri to have a different accent, gender, and language. 我们大多数人都熟悉Siri&#xff0c;这是一种美国女性声音。 您可能没…

mac word 设置语言_如何更改Mac的语言和区域设置

mac word 设置语言If you want to use your Mac in a different language, or you’re live in a different region, then you can change it in OS X. When you do, it’ll display everything in your preferred language, currency, date format, and more. 如果您想以其他语…

飞利浦dicom_如何按计划打开或关闭飞利浦色相灯

飞利浦dicomThe Philips Hue app can do a handful of cool stuff with your Hue lights, including the ability to schedule your lights to turn on and off at specific times throughout the day. Here’s how to set it up so that you never have to flip a switch ever…

Mono生命周期小实验

今天在写代码的时候&#xff0c;遇到一个初始化顺序问题&#xff0c;于是做了一个实验&#xff0c;下面记录结果&#xff1a; 情景&#xff1a; 1.在 脚本A中实例化 一个预制体&#xff0c;该预制体挂有脚本B 2.在 脚本A中&#xff0c;获取实例化物体 身上的 脚本B&#xff0c;…

[读书笔记]大型分布式网站架构设计与实践.分布式缓存

前言&#xff1a;本书是对分布式系统架构涉及到的相关技术的一本科普书籍。由于很难作为开发参考&#xff0c;只能但求了解。所以通篇浅读&#xff0c;对分布式系统进行大致的了解。因为写的非常好&#xff0c;感觉非常有意思&#xff0c;自己也做不出总结。所谓的读书笔记也就…

宁波保哥后院_如何抛出终极后院电影之夜

宁波保哥后院Most people have the basics of throwing a movie night down: you get a movie, you get snacks, you get comfortable, and boom, you’re done. When it comes to throwing a movie party in the backyard, however, things get a little trickier. Read on as…

大厂前端高频面试问题与答案精选

近日&#xff0c;GitHub上一位名为木易杨&#xff08;yygmind&#xff09;的开发者&#xff0c;在 GitHub 中建了一个名为Advanced-Frontend/Daily-Interview-Question项目&#xff0c;该项目每天会更新一道前端大厂面试题&#xff0c;并邀请开发者在issue区中作答&#xff0c;…

OpenLayers学习笔记5——使用jQuery UI实现查询并标注(UI篇)

近期事情非常多&#xff0c;老板给的压力也非常大。经常出差&#xff0c;另外项目和个人研究还都要跟上&#xff0c;本月要交论文&#xff0c;还要写专利&#xff0c;仅仅能抽时间来学习其它的东西了。 关于OpenLayers的在博客中不会写太多详细的实现&#xff08;网上有非常多o…

spring cloud config将配置存储在数据库中

转载请标明出处&#xff1a; https://blog.csdn.net/forezp/...本文出自方志朋的博客 Spring Cloud Config Server最常见是将配置文件放在本地或者远程Git仓库&#xff0c;放在本地是将将所有的配置文件统一写在Config Server工程目录下&#xff0c;如果需要修改配置&#xff0…

初步解决博客园代码高亮的一个方案

今天我要推荐的是一个免费而且支持markdown语法的软件——Typora 它有很多优点&#xff0c;支持多种类型代码的高亮风格&#xff0c;方便的排版处理&#xff0c;支持Latex等&#xff0c;最重要的一点是真正做到了所见即所得ヽ(&#xff9f;∀&#xff9f;)&#xff92;(&#x…

git工作原理

工作区&#xff1a;就是你在电脑里能看到的目录。暂存区&#xff1a;英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件&#xff08;.git/index&#xff09;中&#xff0c;所以我们把暂存区有时也叫作索引&#xff08;index&#xff09;。版本库&#xf…