`

瀑布流布局

 
阅读更多

用法:

html:

<div class="wf-container"></div>

// 初始化

var waterfallObj = new Waterfall({

containerSelector: '.wf-container',

minBoxWidth: 250

});

// 添加元素

var elem = document.createElement('h2');

elem.textContent = '一汽股份不履行承诺或早有预兆 律师称中小股东可起诉公司控股股东'

 

waterfallObj.addBox(elem)

 

源码:

(function() {
  var Waterfall = function(opts) {
    var minBoxWidth;
    Object.defineProperty(this, 'minBoxWidth', {
      get: function() { return minBoxWidth; },
      set: function(value) {
        if(value < 100) value = 100;
        if(value > 1000) value = 1000;
         
        minBoxWidth = value;
      }
    });
 
    opts = opts || {};
    var containerSelector = opts.containerSelector || '.wf-container';
    var boxSelector = opts.boxSelector || '.wf-box';
 
    // init properties
    this.minBoxWidth = opts.minBoxWidth || 250;
    this.columns = [];
    this.container = document.querySelector(containerSelector);
    this.boxes = this.container ? 
      Array.prototype.slice.call(this.container.querySelectorAll(boxSelector)) : [];
 
    // compose once in constructor
    this.compose();
 
    // handle the image or something which might change size after loaded
    var images = this.container.querySelectorAll('img'), that = this;
    var clr;
    for (var i = 0; i < images.length; i++) {
      var img = images[i];
      img.onload = function() {
        if(clr) clearTimeout(clr);
 
        clr = setTimeout(function() {
          that.compose(true);
        }, 500);
      }
    }
 
    window.addEventListener('resize', function() {
      that.compose();
    });
  }
 
  // compute the number of columns under current setting
  Waterfall.prototype.computeNumberOfColumns = function() {
    var num = Math.floor(this.container.clientWidth / this.minBoxWidth);
    num = num || 1; // at least one column
 
    return num;
  }
 
  // init enough columns and set the width
  Waterfall.prototype.initColumns = function(num) {
    if(num > 0) {
      // create column div
      this.columns = [];
      var width = (100 / num) + '%';
      while(num--) {
        var column = document.createElement('div');
        column.className = 'wf-column';
        column.style.width = width;
        this.columns.push(column);
        this.container.appendChild(column);
      }
    }
  }
 
  // get the index of shortest column
  Waterfall.prototype.getMinHeightIndex = function() {
    if(this.columns && this.columns.length > 0) {
      var min = this.columns[0].clientHeight, index = 0;
      for (var i = 1; i < this.columns.length; i++) {
        var columnElem = this.columns[i];
        if(columnElem.clientHeight < min) {
          min = columnElem.clientHeight;
          index = i;
        }
      }
      return index;
    }
    else return -1;
  }
 
  // compose core
  Waterfall.prototype.compose = function(force) {
    var num = this.computeNumberOfColumns();
    var cols = this.columns.length;
     
    if(force || num != cols) {
      // remove old column
      for (var i = 0; i < this.columns.length; i++) {
        var columnElem = this.columns[i];
        columnElem.remove();
      }
 
      // init new column
      this.initColumns(num);
 
      // compose
      for (var i = 0, l = this.boxes.length; i < l; i++) {
        var box = this.boxes[i];
        this.addBox(box);
      }
    }
  }
 
  // add a new box to grid
  Waterfall.prototype.addBox = function(elem) {
    // push if new box
    if(this.boxes.indexOf(elem) < 0) this.boxes.push(elem);
 
    var columnIndex = this.getMinHeightIndex();
    if(columnIndex > -1) {
      var column = this.columns[columnIndex];
      column.appendChild(elem);
    }
  }
 
  window.Waterfall = Waterfall;
})()

 

分享到:
评论

相关推荐

    微信小程序源码 瀑布流布局(学习版)

    微信小程序源码 瀑布流布局(学习版)微信小程序源码 瀑布流布局(学习版)微信小程序源码 瀑布流布局(学习版)微信小程序源码 瀑布流布局(学习版)微信小程序源码 瀑布流布局(学习版)微信小程序源码 瀑布流布局(学习版)...

    微信小程序 瀑布流布局 (源码)

    微信小程序 瀑布流布局 (源码)微信小程序 瀑布流布局 (源码)微信小程序 瀑布流布局 (源码)微信小程序 瀑布流布局 (源码)微信小程序 瀑布流布局 (源码)微信小程序 瀑布流布局 (源码)微信小程序 瀑布流布局 (源码)微信...

    微信小程序——瀑布流布局(截图+源码).zip

    微信小程序——瀑布流布局(截图+源码).zip 微信小程序——瀑布流布局(截图+源码).zip 微信小程序——瀑布流布局(截图+源码).zip 微信小程序——瀑布流布局(截图+源码).zip 微信小程序——瀑布流布局(截图+...

    瀑布流布局 WaterfallLayout

    瀑布流布局,也被称为Masonry布局或Pinterest布局,是一种常用于网页和移动应用中的展示大量图像或内容的方式。它的特点是内容以多列的形式排列,每一列的高度不固定,随着页面滚动,新内容会自然地填充到列的底部,...

    微信小程序-实现瀑布流布局demo源代码

    本教程将通过一个具体的实例——“微信小程序-实现瀑布流布局demo”来探讨如何在微信小程序中实现瀑布流布局和无限下拉加载功能。 首先,我们要理解瀑布流布局。这是一种常见的网页设计布局方式,其特点是以多列...

    纯css3实现横向瀑布流布局,横向瀑布流代码.zip

    瀑布流布局,又称Masonry布局,是一种常见的网页布局方式,尤其在展示图片或者商品时非常流行。这种布局的特点是每个元素(通常是图片)的宽度不固定,但它们的左侧边缘会对齐,形成一种自适应的错落效果,类似于...

    微信小程序图片瀑布流布局demo

    在这个“微信小程序图片瀑布流布局demo”中,我们将会探讨如何在微信小程序中实现图片的瀑布流展示,这是一种常见的网页和移动应用设计模式,尤其适用于图片分享和展示类应用。 瀑布流布局,又称为无限滚动或荷叶边...

    瀑布流布局,点击加载更多效果

    瀑布流布局,也被称为Masonry布局,是一种常用于图片展示或商品列表的网页设计模式,它的特点是元素在页面上自适应地垂直排列,形成一种类似瀑布倾泻的效果。这种布局方式能够有效地利用屏幕空间,使得视觉效果更加...

    手摸手,带你实现移动端H5瀑布流布局.doc

    移动端H5瀑布流布局技术 移动端H5瀑布流布局是一种流行的网页布局方式,视觉上呈现出一种像瀑布一样垂直落下的排版。每张图片并不是显示的正正方方的,而是有的长有的短,呈现出一种不规则的形状。但是它们的宽度...

    Android瀑布流布局实现

    瀑布流布局,又称Masonry布局,是一种常见的网页和移动应用界面设计方式,尤其在展示图片或者商品信息时非常流行。这种布局方式模仿了瀑布流水的效果,使得内容在屏幕上以不规则的多列形式自上而下排列,每列的高度...

    android瀑布流布局源码

    瀑布流布局,又称为Pinterest布局,是Android应用中一种常见的图片展示方式,因其效果类似瀑布倾泻而下,且图片可以交错排列,视觉效果独特,故得名。这种布局方式在展示图片分享、商品列表等场景中非常流行,能够...

    原生JS瀑布流布局,无限加载

    瀑布流布局,也被称为Masonry布局,是一种网页设计布局方式,常见于图片分享网站和电商产品展示页面。这种布局的特点是元素逐行排列,每行中的元素宽度不固定,但高度自适应,使得整体视觉效果像瀑布一样从上至下...

    Android UI之瀑布流布局效果实例.rar

    Android 瀑布流布局,这个演示例子定义了一个3列的图片瀑布流布局,每次加载15张图片,根据屏幕大小计算每列大小,判断操作是否滚动到最顶端和最底端,根据判断加载所有图片路径,并考虑防止内存溢出,获取真实宽高...

    masonry瀑布流布局滑动到底部加载更多demo

    瀑布流布局,又称Masonry布局,是一种常见的网页布局方式,尤其在图片展示、电商产品列表等场景中广泛应用。它的特点是每个元素(如图片)在垂直方向上排列,如同瀑布一样一泻而下,同时在水平方向上保持一定的对齐...

    小程序源码 瀑布流布局 (代码+截图)

    小程序源码 瀑布流布局 (代码+截图)小程序源码 瀑布流布局 (代码+截图)小程序源码 瀑布流布局 (代码+截图)小程序源码 瀑布流布局 (代码+截图)小程序源码 瀑布流布局 (代码+截图)小程序源码 瀑布流布局 (代码+截图)小...

    瀑布流布局源码

    瀑布流布局,又称Masonry布局,是一种常见的网页布局方式,尤其在展示图片或者商品列表时应用广泛。这种布局的特点是每个元素(如图片)在页面上自上而下垂直排列,当一行排列满后,下一行会自然地向左偏移,形成一...

    仿花瓣瀑布流布局主题petal_2.0

    瀑布流是今年流行的一种页面布局方式,淘宝哇喔,蘑菇街,点点等都采用了瀑布流布局。花瓣主题集成了日志一键分享功能,对于提升网站流量非常有用。另外petal对于浏览器的兼容也是不错的,支持目前所有主流浏览器,...

    白色纯净简洁的瀑布流布局html5模板_html5 bootstrap 响应式模板UI前端源码.rar

    瀑布流布局是一种常见的网页设计模式,它以一种不规则的方式排列元素,使页面看起来像瀑布一样自上而下流动。这种布局方式常用于图片展示、社交媒体应用和电子商务网站,因为它可以提供良好的视觉体验,使用户在浏览...

    iOS-瀑布流布局

    瀑布流布局,又称为Masonry布局,是一种在iOS应用中常用的设计模式,特别是在展示大量图片或者商品信息时,能够提供良好的用户体验。这种布局方式模仿了真实世界中瀑布流水的效果,使得屏幕上的元素自上而下排列,每...

    Android 瀑布流布局库源码

    瀑布流布局在Android应用开发中是一种常见的展示方式,尤其在电商、社交等应用中用于商品或图片的展示。它的特点是视图元素不均匀分布,像瀑布一样从上至下流淌,每一行的列数可能不同,形成一种错落有致的效果。在...

Global site tag (gtag.js) - Google Analytics