码迷,mamicode.com
首页 > 其他好文 > 详细

瀑布流

时间:2018-08-14 21:59:43      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:它的   lse   find   数组   length   next   tco   his   其他   

const defaultConfig = {
  boxName: #waterfall,
  itemName: .waterfall__item,
  gap: 10,
  boxLeft: 15
};

module.exports = class Waterfall {
  constructor(userConfig) {
    const _this = this;

    this.config = Object.assign({}, defaultConfig, userConfig);
    this.$box = $(this.config.boxName);
    this.$items = this.$box.find(this.config.itemName);
    this.pageWidth = $(document).width();
    this.itemWidth = this.$items.eq(0).outerWidth();
    this.gap = (this.pageWidth / 375) * this.config.gap;
    this.boxLeft = (this.pageWidth / 375) * this.config.boxLeft;
    this.columns = parseInt(this.pageWidth / (this.itemWidth + this.gap), 10);
    this.itemHeightArr = [];

    for (let i = 0; i < this.$items.length; i++) {
      const $curItem = this.$items.eq(i);
      const counted = $curItem.data(count);

      if (i < this.columns) {
        // 2- 确定第一行
        if (!counted) {
          $curItem.css({
            top: 0,
            left: (_this.itemWidth + _this.gap) * i + _this.boxLeft + px
          });
          // 标记当前项被计算过,防止重复计算
          $curItem.data(count, true);
        }
        this.itemHeightArr.push($curItem.outerHeight());
      } else {
        // eslint-disable-next-line
        // 其他行
        // 3- 找到数组中最小高度  和 它的索引
        this.minHeight = this.itemHeightArr[0];
        this.minIndex = 0;

        for (let j = 0; j < this.itemHeightArr.length; j++) {
          if (this.minHeight > this.itemHeightArr[j]) {
            this.minHeight = this.itemHeightArr[j];
            this.minIndex = j;
          }
        }
        // 4- 设置下一行的第一个盒子位置
        // top值就是最小列的高度 + gap
        if (!counted) {
          $curItem.css({
            top: _this.itemHeightArr[_this.minIndex] + _this.gap + px,
            left: _this.$items.eq(_this.minIndex).offset().left + px
          });
          // 标记当前项被计算过,防止重复计算
          $curItem.data(count, true);
        }
        // 5- 修改最小列的高度
        // 最小列的高度 = 当前自己的高度 + 拼接过来的高度 + 间隙的高度
        this.itemHeightArr[this.minIndex] =
          this.itemHeightArr[this.minIndex] + $curItem.outerHeight() + this.gap;
      }
    }
  }
};

 

瀑布流

标签:它的   lse   find   数组   length   next   tco   his   其他   

原文地址:https://www.cnblogs.com/kugeliu/p/9477933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!