.HTML 利用封装的 jquerywaterfall.js 方法 完成

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>瀑布流</title>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="js/jquerywaterfall.js"></script>
<script>
$(function(){
$('.items').waterFall();
});
</script> <style>
body{background:#DEE1E6}
.container{width:1200px;margin:0 auto}
.items{position:relative}
.item{width:230px;position:absolute;left:0;top:0;box-shadow:0 1px 2px 0 rgba(0,0,0,0.1);border-radius:8px;overflow:hidden;background:#fff;margin-bottom:20px}
.item img{display:block;width:100%}
.item-text{padding:10px;font-size:14px;color:#999}
</style>
</head>
<body>
<div class="container">
<div class="items">
<div class="item">
<img src="data:images/1.jpg" alt="">
<div class="item-text">
<p class="item-title">标题</p>
<p class="item-desc">描述信息</p>
<p class="item-updataTime">发布时间</p>
</div>
</div>
<div class="item">
<img src="data:images/2.jpg" alt="">
<div class="item-text">
<p class="item-title">标题</p>
<p class="item-desc">描述信息</p>
<p class="item-updataTime">发布时间</p>
</div>
</div>
<div class="item">
<img src="data:images/3.jpg" alt="">
<div class="item-text">
<p class="item-title">标题</p>
<p class="item-desc">描述信息</p>
<p class="item-updataTime">发布时间</p>
</div>
</div>
<div class="item">
<img src="data:images/4.jpg" alt="">
<div class="item-text">
<p class="item-title">标题</p>
<p class="item-desc">描述信息</p>
<p class="item-updataTime">发布时间</p>
</div>
</div>
<div class="item">
<img src="data:images/5.jpg" alt="">
<div class="item-text">
<p class="item-title">标题</p>
<p class="item-desc">描述信息</p>
<p class="item-updataTime">发布时间</p>
</div>
</div>
<div class="item">
<img src="data:images/6.jpg" alt="">
<div class="item-text">
<p class="item-title">标题</p>
<p class="item-desc">描述信息</p>
<p class="item-updataTime">发布时间</p>
</div>
</div>
<div class="item">
<img src="data:images/7.jpg" alt="">
<div class="item-text">
<p class="item-title">标题</p>
<p class="item-desc">描述信息</p>
<p class="item-updataTime">发布时间</p>
</div>
</div>
<div class="item">
<img src="data:images/8.jpg" alt="">
<div class="item-text">
<p class="item-title">标题</p>
<p class="item-desc">描述信息</p>
<p class="item-updataTime">发布时间</p>
</div>
</div>
<div class="item">
<img src="data:images/9.jpg" alt="">
<div class="item-text">
<p class="item-title">标题</p>
<p class="item-desc">描述信息</p>
<p class="item-updataTime">发布时间</p>
</div>
</div>
<div class="item">
<img src="data:images/10.jpg" alt="">
<div class="item-text">
<p class="item-title">标题</p>
<p class="item-desc">描述信息</p>
<p class="item-updataTime">发布时间</p>
</div>
</div>
</div>
</div>
</body>
</html>

.jquerywaterfall.js

 $.fn.waterFall=function(){
// 要计算每一个item元素的left、top值,宽度都是一样,不一样的是高度
//计算每一个item元素的left值,需要知道每一个item元素的宽度,以及 元素间距
let $items= $(this);
let parentWidth=$items.width();//总宽度1200px
let column = 5;//5列
let $childRen = $items.children('.item');//获取所有 item元素
let W =$childRen.width();//获取item 元素的宽度
console.log(W);
let space =(parentWidth-column*W)/(column-1);//获取 元素之间的间距
let arrHeight=[];//存储一下,一行中所有item元素的高度
$childRen.each(function(index,dom){
$dom =$(dom);
if(index<column){//计算前面5列的位置
$dom.css({top:0,left:index*(W+space)});//设置css样式
arrHeight.push($dom.height());//存储一下,一行中所有item元素的高度
}else{
//计算后面元素的位置
console.log(arrHeight);
let minIndex = 0;
//找到最矮一列的高度 以及 索引值
let minHeight= arrHeight[minIndex];
for(let i = 0 ; i<arrHeight.length ; i++){
if(minHeight>arrHeight[i]){
minHeight=arrHeight[i];
minIndex=[i];
};
}
console.log(minHeight);
//找到之后,更改item的位置
$dom.css({top:minHeight+space,left:minIndex*(W+space)});
//拿到最矮的那一列,重新赋值 因为你在最矮的一列添加了元素
arrHeight[minIndex]=minHeight+space+$dom.height();
}
});
};

效果图

前端-PC端瀑布流【10张图】的更多相关文章

  1. 面试问了解Linux内存管理吗?10张图给你安排的明明白白!

    文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 今天来带大家研究一下Linux内存管理.对于精通 CURD 的业务同学 ...

  2. 前端jQuery实现瀑布流

    瀑布流是我们经常会见到的东西,一直刷新一直有,其实它实现起来是很简单的.具体代码如下 1.css代码 <style> *{ margin:; padding:; } .container{ ...

  3. 使用vue做移动端瀑布流分页

    讲到瀑布流分页有一个方法一定是要用到的 pullToRefresh() 这个也没什么好解释的,想了解的可以去百度一下 下面上代码 <div id="main" class=& ...

  4. 自实现PC端jQuery版轮播图

    最近其他项目不是很忙,被安排给公司的官网项目做一个新的页面(之前没接触公司官网项目),其中有一个用到轮播图的地方,最开始想直接用swiper.js插件实现就好了,可是发现官网项目里之前都没有引入过sw ...

  5. web前端学习笔记-瀑布流的算法分析与代码实现

    瀑布流效果目前应用很广泛,像花瓣,新浪轻博,蘑菇街,美丽说等好多网站都有.也有好多支持该效果的前段框架,今天学习了一下这种效果的实现,不依赖插件,自己动手分析实现过程,为了便于叙述清楚,分析中的一些名 ...

  6. 10 张图打开 CPU 缓存一致性的大门

    前言 直接上,不多 BB 了. 正文 CPU Cache 的数据写入 随着时间的推移,CPU 和内存的访问性能相差越来越大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU Cac ...

  7. 10 张图聊聊线程的生命周期和常用 APIs

    上一篇文章我们聊了多线程的基础内容,比如为什么要使用多线程,线程和进程之间的不同,以及创建线程的 4 种方式.本文已收录至我的 Github: https://github.com/xiaoqi666 ...

  8. 前端 PC端兼容性问题总结

    1.如果图片加a标签在IE9-中会有边框 解决方案: img{border:none;} 2.rgba不支持IE8 解决方案:可以用 opacity  eg: opacity:0.7;/*FF chr ...

  9. 用10张图来看机器学习Machine learning in 10 pictures

    I find myself coming back to the same few pictures when explaining basic machine learning concepts. ...

随机推荐

  1. Pollard Rho算法浅谈

    Pollard Rho介绍 Pollard Rho算法是Pollard[1]在1975年[2]发明的一种将大整数因数分解的算法 其中Pollard来源于发明者Pollard的姓,Rho则来自内部伪随机 ...

  2. Recurrent Neural Network(3):LSTM Basics and 《Inside Out》

    下图是Naive RNN的Recurrent Unit示意图,可以看到,在每个时间点t,Recurrent Unit会输出一个隐藏状态ht,对ht加工提取后将产生t时刻的输出yt.而在下一个时间节点t ...

  3. urllib.parse解析链接

    1. urlparse() 解析链接,注意,返回值比3多一个params的属性 from urllib.parse import urlparse result = urlparse('http:// ...

  4. MySQL5.7的搭建以及SSL证书

    Centos7 安装MySQL 5.7 (通用二进制包) 1.1  下载软件包 https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-l ...

  5. vue 使用 computed 结合 filter 实现数据的的过滤和排序

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. JS跨域:jsonp、跨域资源共享、iframe+window.name

    JS跨域:jsonp.跨域资源共享.iframe+window.name :https://www.cnblogs.com/doudoublog/p/8652213.html JS中的跨域 请求跨域有 ...

  7. scite配置文件及常用设置

    在linux系统中,SciTE的用户设置文件为 ~/.SciTEUser.properties,优先级高于全局配置文件. scite是个不错的IDE工具,只是本人发现,在开发团队中和其他成员的编辑工具 ...

  8. anaconda安装教程、管理虚拟环境

    原文链接:https://blog.csdn.net/ITLearnHall/article/details/81708148 另可参看文章:https://www.cnblogs.com/jonin ...

  9. ubuntu18.04 搭建scrapy环境(连环踩坑+解决办法)

    ---恢复内容开始--- 预期需求: 打算搭建scrapy环境,基于python3.x的 环境描述: ubuntu18.04自带了python3.6,打算在虚拟环境vlenv中跑scrapy,装好虚拟 ...

  10. 2019 Multi-University Training Contest 1 - 1004 - Vacation - 二分 - 思维

    http://acm.hdu.edu.cn/showproblem.php?pid=6581 一开始想了好几个假算法.但是启发了一下潘哥,假如时间知道的话就可以从头开始确定各个车的位置.那么直接 \( ...