vue中使用vue-waterfall2来实现瀑布流

在很多项目中,会有图文列表或者图片列表的出现,图片宽度好设定,但是高度往往不能设置成定值,一旦图片长款不成比例,就会显得很难看。

所以使用瀑布流可以完美实现这个问题,图片只需要设定宽度,高度自适应,就可以完美实现。

下边我们来说说怎样来实现------------------这个是针对图片以及带文字的卡片

1:安装

yarn  add  vue-waterfall2

2:引用,在main.js中引用

import waterfall from 'vue-waterfall2'
Vue.use(waterfall)

3:正式使用

  <div class="container-water-fall case">        其中case以及case_item是卡片的样式,                
      <waterfall
        :col="col"---------col:划分几列,可以根据屏幕宽度来划分,其类型是数值型
        :gutterWidth="20"
        :data="list"        list:是请求到的每一页数据,由于分页,获取到的只有当前页数,因此列表循环的时候,使用List,即push上每一次page+1的数据
        @loadmore="loadmore"  当滑到页面底部后,需要加载新的数据
        :lazyDistance="200"
      >
        <template>
          <div
            class="case_item cell-item"
            v-show="List.length!==0"
            v-for="(item) in List"
            :key="item._id"
          >
            <div class="imgs">
              <img
                src="https://scdn.xidong360.com/201909/a20e2e94d1664992abecab9a03afa1f1.png?x-oss-process=style/thumb"
                class="image"
              />
            </div>
            <div class="case_bottom">
              <h6>俱乐部名称</h6>
              <p>在中台产品的研发过程中,会出现不同的设计规范和实现</p>
              <p style="margin:0;">
                <v-btn class="case_action" small  text color="primary">编辑</v-btn>
                <v-btn class="case_action" small  text color="#aaa">删除</v-btn>
              </p>
            </div>
          </div>
        </template>
      </waterfall>
    </div>

  方法:

 1:list与List(只写了部分)

       if (this.page === 1) {
              this.List = [];
              setTimeout(() => {
                this.List = res.data.data;------------当时第一页时,将数据赋值给List
              }, 50);
            } else {
              this.List = this.List.concat(res.data.data);----------当页码大于第一页时,List拼接到后面的数组
            }

 2:col

getcol() {
      if (this.width > 1580) {
        this.col = 4;
      } else if (1024 < this.width < 1580) {
        this.col = 3;
      } else if (768 < this.width < 1024) {
        this.col = 2;
      }
    },

3:loadmore:监听当前页面加载完成-------------该页面使用了watch监听page,因此page++后未调取this.getdata();可根据需要自行调取

loadmore1() {
      if (this.page <= this.length && this.loadmore) {
        this.page++;
      }
},

vue-waterfall2 是一个 Vue.js瀑布流组件,可以实现类似 Pinterest 的布局效果。要实现触底加载功能,需要在组件监听滚动事件,判断滚动条是否到达底部,然后触发加载更多数据的方法。 以下是一个简单的示例代码: ```vue <template> <waterfall :list="list" :options="options" @scroll="handleScroll"></waterfall> </template> <script> import Waterfall from 'vue-waterfall2' export default { components: { Waterfall }, data() { return { list: [], // 列表数据 options: { // 瀑布流配置项 }, currentPage: 1, // 当前页码 isEnd: false, // 是否已经加载完所有数据 } }, mounted() { this.loadMore() }, methods: { loadMore() { if (this.isEnd) return // 发送请求获取数据,这里假设返回一个 Promise 对象 fetchData(this.currentPage).then((data) => { if (data.length) { this.list = this.list.concat(data) this.currentPage++ } else { this.isEnd = true } }) }, handleScroll(position) { // 监听滚动事件 const { maxY } = position if (maxY <= window.innerHeight) { this.loadMore() } }, }, } </script> ``` 在这个示例,我们定义了一个 `list` 数组来存放列表数据,`options` 对象用来配置瀑布流效果。在 `mounted` 钩子函数,我们首次加载数据。`loadMore` 方法用来加载更多数据,其 `fetchData` 方法用来发送网络请求获取数据。在 `handleScroll` 方法,我们监听了 `waterfall` 组件的滚动事件,当滚动到底部时触发加载更多数据的方法。`isEnd` 变量用来判断是否已经加载完所有数据,避免重复请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值