原生JS实现的简单“瀑布流”布局

开发 前端
自己动手弄了段原生JS代码,实现了简单的“瀑布流”布局效果,当然肯定不能和以上那些优秀插件相提并论,有兴趣的朋友,可以去看看,希望能带给你或多或少的收获。

自pinterest网站爆红以来,国内一度掀起“仿PIN”狂潮,诸如花瓣、蘑菇街等等。正是如此,“瀑布流”式布局受到广大网民的青睐。众多知名JS库,也相继出现“瀑布流”布局插件,譬如jQuery的Masonry插件、KISSY的waterfall插件等。

今天闲来无聊,我也自己动手弄了段原生JS代码,实现了简单的“瀑布流”布局效果,当然肯定不能和以上那些优秀插件相提并论,有兴趣的朋友,可以去看看,希望能带给你或多或少的收获。

效果预览: http://www.seejs.com/waterfall/   

标签: <无>
 
[代码] [JavaScript]代码
 
  1. <!DOCTYPE html>    
  2.  <html>    
  3.  <head>    
  4.      <meta charset="utf-8">    
  5.      <title>Waterfall代码</title>    
  6.  </head>    
  7.  <body>    
  8.  <style type="text/css">    
  9.  .wf-main{    
  10.      position: relative;    
  11.      margin: 0 auto;    
  12.      width: 990px;    
  13.      overflow: hidden;    
  14.  }    
  15.  .wf-main .wf-cld{    
  16.      position: absolute;    
  17.      margin-bottom: 10px;    
  18.      padding:5px 8px;    
  19.      width: 214px;    
  20.      left: -9999px;    
  21.      top: -9999px;    
  22.      border: 1px solid #999;    
  23.      border-radius: 4px;    
  24.      background-color: #ccc;    
  25.      overflow: hidden;    
  26.  }    
  27.  .wf-cld .inner{    
  28.      position: absolute;    
  29.      left: -9999px;    
  30.      top: -9999px;    
  31.      margin-bottom: 5px;    
  32.      width: 73px;    
  33.      overflow: hidden;    
  34.      border: 1px solid #f00;    
  35.      border-radius: 3px;    
  36.  }    
  37.  .wf-cld .title{    
  38.      margin: 0 0 5px;    
  39.      padding: 5px;    
  40.      width: 63px;    
  41.      color: #f00;    
  42.      font-size: 14px;    
  43.  }    
  44.  </style>    
  45.  <div class="wf-main" id="wf-main">    
  46.      <div class="wf-cld"><h2 style="color:#f50">1、瀑布流</h2></div>    
  47.      <div class="wf-cld">2<br>2</div>    
  48.      <div class="wf-cld">3<br>4<br>4</div>    
  49.      <div class="wf-cld">4<br>4<br>4<br>4</div>    
  50.      <div class="wf-cld">5<br>4<br>4<br>4<br>4</div>    
  51.      <div class="wf-cld">6<br>4<br>4<br>4<br>4<br>4</div>    
  52.      <div class="wf-cld">7<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  53.      <div class="wf-cld">8<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  54.      <div class="wf-cld">9<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  55.      <div class="wf-cld">10<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  56.      <div class="wf-cld">18<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  57.      <div class="wf-cld">19<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  58.      <div class="wf-cld">20<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  59.      <div class="wf-cld" id="wf-inner">    
  60.          <h2 class="inner title">21、内部瀑布流</h2>    
  61.          <div class="inner">21-1<br>1</div>    
  62.          <div class="inner">21-2</div>    
  63.          <div class="inner">21-3</div>    
  64.          <div class="inner">21-4</div>    
  65.          <div class="inner">21-5<br></div>    
  66.          <div class="inner">21-6</div>    
  67.          <div class="inner">21-7</div>    
  68.          <div class="inner">21-8</div>    
  69.          <div class="inner">21-9</div>    
  70.      </div>    
  71.      <div class="wf-cld">22<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  72.      <div class="wf-cld">23<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  73.      <div class="wf-cld">24<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  74.      <div class="wf-cld">11<br>2<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  75.      <div class="wf-cld">12<br>2<br>2<br>3<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  76.      <div class="wf-cld">13<br>4<br>4<br>3<br>3<br>1<br>2<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  77.      <div class="wf-cld">14<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  78.      <div class="wf-cld">15<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  79.      <div class="wf-cld">16<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  80.      <div class="wf-cld">17<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4<br>4</div>    
  81.  </div>    
  82.  <script type="text/javascript">    
  83.  function Waterfall(param){    
  84.      this.id = typeof param.container == 'string' ? document.getElementById(param.container) : param.container;    
  85.      this.colWidth = param.colWidth;    
  86.      this.colCount = param.colCount || 4;    
  87.      this.cls = param.cls && param.cls != '' ? param.cls : 'wf-cld';    
  88.      this.init();    
  89.  }    
  90.  Waterfall.prototype = {    
  91.      getByClass:function(cls,p){    
  92.          var arr = [],reg = new RegExp("(^|\\s+)" + cls + "(\\s+|$)","g");    
  93.          var nodes = p.getElementsByTagName("*"),len = nodes.length;    
  94.          for(var i = 0; i < len; i++){    
  95.              if(reg.test(nodes[i].className)){    
  96.                  arr.push(nodes[i]);    
  97.                  reg.lastIndex = 0;    
  98.              }    
  99.          }    
  100.          return arr;    
  101.      },    
  102.      maxArr:function(arr){    
  103.          var len = arr.length,temp = arr[0];    
  104.          for(var ii= 1; ii < len; ii++){    
  105.              if(temp < arr[ii]){    
  106.                  temp = arr[ii];    
  107.              }    
  108.          }    
  109.          return temp;    
  110.      },    
  111.      getMar:function(node){    
  112.          var dis = 0;    
  113.          if(node.currentStyle){    
  114.              dis = parseInt(node.currentStyle.marginBottom);    
  115.          }else if(document.defaultView){    
  116.              dis = parseInt(document.defaultView.getComputedStyle(node,null).marginBottom);    
  117.          }    
  118.          return dis;    
  119.      },    
  120.      getMinCol:function(arr){    
  121.          var ca = arr,cl = ca.length,temp = ca[0],minc = 0;    
  122.          for(var ci = 0; ci < cl; ci++){    
  123.              if(temp > ca[ci]){    
  124.                  temp = ca[ci];    
  125.                  minc = ci;    
  126.              }    
  127.          }    
  128.          return minc;    
  129.      },    
  130.      init:function(){    
  131.          var _this = this;    
  132.          var col = [],//列高    
  133.              iArr = [];//索引    
  134.          var nodes = _this.getByClass(_this.cls,_this.id),len = nodes.length;    
  135.          for(var i = 0; i < _this.colCount; i++){    
  136.              col[i] = 0;    
  137.          }    
  138.          for(var i = 0; i < len; i++){    
  139.              nodes[i].h = nodes[i].offsetHeight + _this.getMar(nodes[i]);    
  140.              iArr[i] = i;    
  141.          }                
  142.          for(var i = 0; i < len; i++){    
  143.              var ming = _this.getMinCol(col);    
  144.              nodes[i].style.left = ming * _this.colWidth + "px";    
  145.              nodes[i].style.top = col[ming] + "px";    
  146.              col[ming] += nodes[i].h;    
  147.          }    
  148.               
  149.          _this.id.style.height = _this.maxArr(col) + "px";    
  150.      }    
  151.  };    
  152.  new Waterfall({    
  153.      "container":"wf-inner",    
  154.      "colWidth":77,    
  155.      "colCount":3,    
  156.      "cls":"inner"   
  157.  
  158.  });    
  159.  new Waterfall({    
  160.      "container":"wf-main",    
  161.      "colWidth":244,    
  162.      "colCount":4    
  163.  
  164.  });    
  165.  
  166.  </script>    
  167.  
  168.  </body>    
  169.  
  170.  </html>   
  171.  
[图片] 瀑布流.jpg
【编辑推荐】

 

责任编辑:张伟 来源: 开源中国社区
相关推荐

2024-08-19 14:01:00

2013-02-19 10:24:47

瀑布流布局CSS

2024-09-03 17:04:15

前端算法布局

2021-08-09 07:26:33

瀑布流布局代码

2015-02-26 18:09:29

WaterFall V瀑布流Dynamic Gri

2015-02-02 16:21:26

android瀑布流图片加载

2020-06-15 18:00:36

transformbannerJavascript

2022-04-14 15:53:12

开发瀑布流组件

2015-05-07 15:13:22

JS实现JQueryJQuery

2012-06-15 09:35:42

JavaScript

2013-04-03 15:45:51

Android瀑布流android_wat

2024-03-19 08:15:09

云原生云计算容器

2009-09-24 13:12:20

Hibernate原生

2021-02-11 13:56:21

JSweb插件

2022-04-06 18:29:58

CSSJS输入框

2021-12-03 07:27:30

全景浏览Three.js

2009-04-10 09:43:00

Java输出流异常

2021-08-05 18:38:14

青云科技云原生容器

2023-05-10 09:04:10

promise场景业务

2010-08-24 10:11:26

DIV标签
点赞
收藏

51CTO技术栈公众号