最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生JS實現(xiàn)響應(yīng)式瀑布流布局

 更新時間:2015年04月02日 10:15:10   投稿:hebedich  
本文給大家分享的是使用原生的javascript實現(xiàn)的響應(yīng)式的瀑布流布局的方法和源碼,非常的實用,有需要的小伙伴可以參考下。

原生JS實現(xiàn)的瀑布流布局,代碼及demo代碼地址:https://github.com/leozdgao/responsive_waterfall

Demo:http://leozdgao.github.io/demo/responsive_waterfall/

演示圖:

核心代碼:

responsive_waterfall.js

(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;
})()

以上所述就是本文給大家分享的全部內(nèi)容了,希望能夠?qū)Υ蠹沂炀毷褂胘avascript有所幫助。

相關(guān)文章

  • js格式化貨幣數(shù)據(jù)實現(xiàn)代碼

    js格式化貨幣數(shù)據(jù)實現(xiàn)代碼

    貨幣數(shù)據(jù)想要一某種形式在頁面中顯示的話,首先是必須要格式化的,下面為大家介紹下具體的格式化代碼,感興趣的朋友可以參考下
    2013-09-09
  • javascript轉(zhuǎn)換字符串為dom對象(字符串動態(tài)創(chuàng)建dom)

    javascript轉(zhuǎn)換字符串為dom對象(字符串動態(tài)創(chuàng)建dom)

    那么今天的目的就是教大家怎么去實現(xiàn)一個這樣的方法用來把字符串直接轉(zhuǎn)換為標(biāo)準(zhǔn)的dom對象
    2010-05-05
  • JavaScript中實現(xiàn)sprintf、printf函數(shù)

    JavaScript中實現(xiàn)sprintf、printf函數(shù)

    這篇文章主要介紹了JavaScript中實現(xiàn)sprintf、printf函數(shù),這兩個函數(shù)在大多數(shù)編程語言中都有,但JS中卻沒有,本文介紹在js中實現(xiàn)這兩個函數(shù)功能,需要的朋友可以參考下
    2015-01-01
  • JavaScript類型系統(tǒng)之布爾Boolean類型詳解

    JavaScript類型系統(tǒng)之布爾Boolean類型詳解

    這篇文章主要介紹了JavaScript類型系統(tǒng)之布爾Boolean類型詳解的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • JavaScript基礎(chǔ)知識及常用方法總結(jié)

    JavaScript基礎(chǔ)知識及常用方法總結(jié)

    JAVASCRIPT是AJAX技術(shù)中不可或缺的一部分,所以想學(xué)好AJAX以及現(xiàn)在流行的AJAX框架,學(xué)好JAVASCRIPT是最重要的,通過本篇文章給大家介紹javascript基礎(chǔ)知識及常用方法總結(jié),對js基礎(chǔ)知識及常用方法相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • 原生JS實現(xiàn)小小的音樂播放器

    原生JS實現(xiàn)小小的音樂播放器

    這篇文章主要為大家詳細(xì)介紹了原生JS實現(xiàn)音樂播放器,支持循環(huán)、隨機(jī)播放,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 當(dāng)前流行的JavaScript代碼風(fēng)格指南

    當(dāng)前流行的JavaScript代碼風(fēng)格指南

    這篇文章主要介紹了當(dāng)前流行的JavaScript代碼風(fēng)格指南,同時推薦了一款風(fēng)格檢驗工具jshint,可以配合大多數(shù)的編輯器統(tǒng)一團(tuán)隊代碼風(fēng)格,需要的朋友可以參考下
    2014-09-09
  • js實現(xiàn)搜索提示框效果

    js實現(xiàn)搜索提示框效果

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)搜索提示框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • echarts柱狀圖的點擊事件代碼示例

    echarts柱狀圖的點擊事件代碼示例

    這篇文章主要給大家介紹了關(guān)于echarts柱狀圖點擊事件的相關(guān)資料,在實際的項目開發(fā)中我們通常會用到Echarts來對數(shù)據(jù)進(jìn)行展示,有時候需要用到Echarts的點擊事件,增加系統(tǒng)的交互,需要的朋友可以參考下
    2023-09-09
  • JS實現(xiàn)模糊查詢帶下拉匹配效果

    JS實現(xiàn)模糊查詢帶下拉匹配效果

    這篇文章主要介紹了JS實現(xiàn)模糊查詢帶下拉匹配效果,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06

最新評論

咸阳市| 徐汇区| 武乡县| 平阴县| 玛多县| 松滋市| 新泰市| 珲春市| 特克斯县| 广水市| 平舆县| 富顺县| 德钦县| 永吉县| 井冈山市| 长海县| 大余县| 昌黎县| 贞丰县| 汾阳市| 河源市| 内江市| 孝感市| 精河县| 汉寿县| 望城县| 镇巴县| 攀枝花市| 司法| 多伦县| 双城市| 阿瓦提县| 遂昌县| 克拉玛依市| 科技| 碌曲县| 定日县| 大足县| 延长县| 辽阳市| 绍兴县|