vue-waterfall2瀑布流

144 阅读1分钟

使用瀑布流组件

<template>
  <div class="app-container">
    <waterfall :col="2" :width="itemWidth" :gutter-width="gutterWidth" :data="[]">
      <el-table
        v-for="(tableData, index) in tableDataList"
        :key="'tableData' + index"
        :data="tableData"
        style="margin-top: 10px"
      >
        <el-table-column prop="name" label="Name"></el-table-column>
        <el-table-column prop="age" label="age"></el-table-column>
      </el-table>
    </waterfall>
  </div>
</template><script>
export default {
  name: 'VueWaterfall',
  data() {
    return {
      tableDataList: [],
      itemWidth: 200,
      gutterWidth: 20
    }
  },
  created() {
    this.getList()
  },
  mounted() {
    this.$nextTick(() => {
      this.setWaterFallWidth()
    })
​
    window.addEventListener('resize', this.setWaterFallWidth)
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.setWaterFallWidth)
  },
  methods: {
    // 模拟接口请求
    getList() {
      setTimeout(() => {
        Promise.resolve().then(() => {
          this.tableDataList = this.getMockData()
        })
      }, 200)
    },
    getRandomInt(min = 0, max = 10) {
      return Math.floor(Math.random() * (max - min)) + min
    },
    getMockData() {
      let tableDataList = []
​
      for (let i = 0; i < 10; i++) {
        tableDataList.push(new Array(this.getRandomInt()).fill({ name: 'Matt', age: i }))
      }
      return tableDataList
    },
    // 动态设置瀑布流元素宽度
    setWaterFallWidth() {
      const containerEl = document.querySelector('#vueWaterfall')
      const els = document.querySelectorAll('.vue-waterfall-column')
​
      const waterfallWidth = (containerEl.clientWidth - this.gutterWidth) / 2
      els.forEach((el) => {
        el.style.width = waterfallWidth - 1 + 'px' // 缩放至90%时,不-1一行只能放下一个
      })
    }
  }
}
</script><style scoped lang="scss"></style>
// main.js
import waterfall from 'vue-waterfall2'Vue.use(waterfall)

image.png

参考文档:

npm:www.npmjs.com/package/vue…

github:github.com/AwesomeDevi…