1. /*封装一个瀑布流插件*/
  2. (function($){
  3. $.fn.WaterFall = function(){
  4. /*这是你初始化 调用这个方法的时候的 那个jquery选着到的dom对象 this*/
  5. /*$this 拿到的瀑布流容器 中有需要需要去做定位的盒子*/
  6. var $this = $(this);
  7.  
  8. /*拿到容器的宽度*/
  9. var parentWidth = $this.width();
  10.  
  11. /*瀑布流容器当中的item*/
  12. var items = $this.children();
  13.  
  14. /*子容器的宽度*/
  15. var childWidth = items.width();
  16.  
  17. /*多少列*/
  18. var columnCount = 5;
  19.  
  20. /*间距*/
  21. var space = (parentWidth - childWidth * columnCount)/(columnCount-1);
  22.  
  23. /*核心布局代码*/
  24. /*
  25. * 1.第一排的盒子 top定位 都是0
  26. * 2.距离左边的距离 根据当前所属的列 第几列 5 索引 4*宽度+间距
  27. * 3.计算top的定位 找到最矮的那列 把它追加上去
  28. * 4.容器是没有高度的 需要计算最高的那列 设置高度
  29. * 【怎么样实时的记录每一列的高度】 需要有一个记录每一列高度的变量 数组记录五裂的高度
  30. * */
  31.  
  32. var colArray = [];
  33.  
  34. /*遍历所有的盒子*/
  35. $.each(items,function(i,item){
  36. /*当前盒子*/
  37. var $item = $(item);
  38. /*索引是0-4就是五个第一排的盒子*/
  39. if(i < 5){
  40. /*初始化数组*/
  41. colArray[i] = $item.height();
  42. /*第一排的盒子 定位*/
  43. $item.css({
  44. top:0,
  45. left:i*( childWidth + space )
  46. });
  47. }else{
  48. /*计算定位*/
  49. /*3.计算top的定位 找到最矮的那列 把它追加上去*/
  50. var minItem = colArray[0];/*最小的高度*/
  51. var minIndex = 0;/*最下的那列的索引*/
  52. for(var j = 0 ; j < colArray.length ; j ++){
  53. if(minItem > colArray[j]){
  54. minItem = colArray[j];
  55. minIndex = j;
  56. }
  57. }
  58. //console.log(minItem);
  59. /*因为要定位left 需要这列的索引*/
  60. $item.css({
  61. top:minItem + space,
  62. left:minIndex * (childWidth + space)
  63. });
  64. /*colArray 高度变了 所以要重新设置*/
  65. colArray[minIndex] = minItem + space + $item.height();
  66. }
  67. });
  68.  
  69. /*布局完成在来设置容器的高度*/
  70. console.log(colArray);
  71. /* 4.容器是没有高度的 需要计算最高的那列 设置高度*/
  72. var maxItem = colArray[0];
  73. for(var i = 0 ; i < colArray.length ; i ++){
  74. if(maxItem < colArray[i]){
  75. maxItem = colArray[i];
  76. }
  77. }
  78. $this.height(maxItem);
  79.  
  80. }
  81. })(jQuery);

基于jQuery封装一个瀑布流插件的更多相关文章

  1. jQuery动态网格瀑布流插件Masonry

    Masonry是一款非常强大的jQuery动态网格布局插件,可以帮助开发人员快速开发瀑布流界面效果.和CSS中float的效果不太一样的地方在于,float先水平排列,然后再垂直排列,使用Masonr ...

  2. 利用jQuery来扩展一个瀑布流插件

      简单了解jQuery.fn.extend() jQuery.fn.extend()函数用于为jQuery扩展一个或多个实例属性和方法(主要用于扩展方法). (截图来自jQuery文档) 为了更清晰 ...

  3. 原生 JS 实现一个瀑布流插件

    更好的阅读体验,点击 原文地址 瀑布流布局中的图片有一个核心特点 -- 等宽不定等高,瀑布流布局在国内网网站都有一定规模的使用,比如pinterest.花瓣网等等.那么接下来就基于这个特点开始瀑布流探 ...

  4. 基于jQuery的简易瀑布流实现

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 基于jQuery 的图片瀑布流实现

    解题思路: 第1步  分析问题:我这边的处理方式是以列为单位.每次滚动条滚到底部,把需要加的新的内容放在高度最小的列.如下图所示 加载后的显示 如果在继续往下滚动.新图片就会在1下边显示,如此类推. ...

  6. vue 写一个瀑布流插件

    效果如图所示: 采用了预先加载图片,再计算高度的办法..网络差的情况下,可能有点卡 新建 vue-water-easy.vue  组件文件 <template> <div class ...

  7. 自定义基于jquery竖向瀑布流插件

    公司新项目做了一个关于图片的板块,网上找了一些瀑布流插件都不是很适合自己,于是就自己造轮子写一个,并封装成插件github 于是就想分享一下,主要是为了更好的学习与记忆. 如果大家进来了,希望能给我g ...

  8. 8款实用的Jquery瀑布流插件

    1.网友Null分享Jquery响应式瀑布流布局插件 首先非常感谢网友Null的无私分享,此作品是一款响应式瀑布流布局Jquery插件,网友Null增加了一个屏幕自适应和响应式,响应式就是支持智能手机 ...

  9. jQuery插件之-瀑布流插件

    jquery.wookmark.js 一个实现瀑布流自适应宽度布局的jQuery插件—jquery.wookmark.js , wookmark使用非常简单到只需要一句代码就能实现,除此之外,当页面宽 ...

随机推荐

  1. day34-3 类和对象小知识

    目录 属性查找顺序 类与对象的绑定方法 类与数据类型 对象的高度整合 属性查找顺序 属性查找顺序:先从对象自身查找,对象没有就去类中查找,类中没有则报错 class Student: name = ' ...

  2. Javaweb 使用Servlet技术改写用户登录 使用Filter技术解决中文乱码

    先把实验3的jsp页面复制过来: WebContent->WEB-INF->lib下面的jar包8.0版本也要记得复制: Java Resources->src下的 cn.edu.h ...

  3. 深度遍历DFS

    目录: https://zhipianxuan.github.io/ 一.树的DFS 二.二维矩阵的DFS 三.图的DFS 一.题目一:二维矩阵(输出所有路径数) 思路:从起点开始,DFS,直到走到终 ...

  4. 在 Linux 下判断系统当前是否开启了超线程

    转自: http://www.cnblogs.com/wjoyxt/p/4804293.html #lscpu Thread(s) per core: 2 Core(s) per socket: 6 ...

  5. 当svn检出项目检出一半时停止,如何继续检出

    1.当svn检出项目时,发现中断,又不想重新检出可以在已检出的项目目录下右键 2.然后点击 之后直接update你的项目就可以了

  6. webpack 配置 Vue 多页应用 —— 从入门到放弃

    webpack 配置 Vue 多页应用 -- 从入门到放弃 一直以来,前端享有无需配置,一个浏览器足矣的优势,直到一大堆构建工具的出现,其中 webpack 就是其中最复杂的一个,因此出现了一个新兴职 ...

  7. 【ACM】hdu_3782_xxx定律_201308011521

    xxx定律Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. asp.net--Area功能

    大型项目必用,这个必须要会,相当于一个MVC的子程序,方便管理,可以理解为一个独立的小MVC程序了 隔离代码.避免冲突 区域是独立的MVC小程序

  9. [MySQLCPU]线上飙升800%,load达到12的解决过程

    接到报警通知,负载过高,达到800%,load也过高,有11了. MySQL版本为5.6.12-log 1 top 之后,确实是mysqld进程占据了所有资源. 2 查看error日志,无任何异常 3 ...

  10. php类似shell脚本的用法

    参考: http://www.cnblogs.com/myjavawork/articles/1869205.html php还可以用于类似于shell脚本,哈哈,对编程语言和对整个计算机系统的认识又 ...