## Waterfall 瀑布流

### 使用指南

#### 全局注册

`Waterfall`引入后就自动全局安装。如果需要,可以再次手动安装:

```js
import Vue from 'vue';
import { Waterfall } from 'vant';

Waterfall.install(Vue);
```

#### 局部注册

如果你只是想在某个组件中使用`Waterfall`,你可以在对应组件中注册`Waterfall`指令,这样只能在你注册的组件中使用`Waterfall`:

```js
import { Waterfall } from 'vant';

export default {
  directives: {
    WaterfallLower: Waterfall('lower'),
    WaterfallUpper: Waterfall('upper')
  }
};
```

### 代码演示

<script>
export default {
  data() {
    return {
      list: [1, 2, 3, 4, 5],
      loading: false,
      finished: false
    };
  },
  methods: {
    loadMore() {
      if (this.list.length >= 200) {
        this.finished = true;
        return;
      }

      this.loading = true;
      setTimeout(() => {
        let lastNumber = this.list[this.list.length - 1];
        for (let i = 0; i < 5; i ++) {
          lastNumber += 1;
          this.list.push(lastNumber);
        }
        this.loading = false;
      }, 2000);
    }
  },
  computed: {
    isWaterfallDisabled() {
      return this.loading || this.finished;
    }
  }
};
</script>

<style>
.demo-waterfall {
  .waterfall {
    max-height: 360px;
    overflow: scroll;
    border-top: 1px solid #e5e5e5;
  }
  .waterfall-item {
    line-height: 50px;
    border-bottom: 1px solid #e5e5e5;
    background: #fff;
  }
  .page-desc {
    padding: 5px 0;
    line-height: 1.4;
    font-size: 14px;
    text-align: center;
    color: #666;
  }
  .van-loading {
    margin: 10px auto;
  }
}
</style>

#### 基础用法

:::demo 基础用法
```html
<p class="page-desc">当即将滚动到元素底部时,会自动加载更多</p>
<div class="waterfall">
  <div
    v-waterfall-lower="loadMore"
    waterfall-disabled="isWaterfallDisabled"
    waterfall-offset="400"
  >
    <div
      class="waterfall-item"
      v-for="(item, index) in list"
      :key="index"
      style="text-align: center;"
    >
      {{ item }}
    </div>
    <van-loading
      v-if="loading"
      :type="'circle'"
      :color="'black'"
    ></van-loading>
  </div>
</div>
```
:::

### API

| 参数       | 说明      | 类型       | 默认值       | 可选值       |
|-----------|-----------|-----------|-------------|-------------|
| v-waterfall-lower | 滚动到底部, 触发执行的函数 | `Function`  | - |  |
| v-waterfall-upper | 滚动到顶部, 触发执行的函数 | `Function`  | - |  |
| waterfall-disabled | 在vue对象中表示是否禁止瀑布流触发的key值 | `String`  | - |  |
| waterfall-offset | 触发瀑布流加载的阈值 | `Number`  | `300` |   |