vue:pc项目下拉触底加载踩坑

今天接到一个需求,将刚接回来的外包项目中的官网内的卡片+分页展示的资料列表改为table展示,且要支持下拉触底加载,自然而然就想到table+下拉触底插件。

由于项目中刚好使用的是element-ui,于是一通百度选择了 el-table-infinite-scroll

在el-table上使用无限滚动加载 - 云+社区 - 腾讯云后来发现滚动到下面有时候会执行load2次,用下面的方法规避,间隔2秒才执行逻辑代码https://cloud.tencent.com/developer/article/1937768按照教程做好demo,想着周末早点下班,回家撸猫,就赶紧去找产品确认,结果产品说,这个地方不要让表格出现滚动条,要让页面自动往下撑开,但是el-table如果没有一个高度,是没有办法出现滚动条的,就算不显示的设置高度,也会有一个默认的高度。于是又是一通百度,发现原来还有一个叫做v-infinite-scroll的插件

v-infinite-scroll无限滚动_山海一哥的博客-CSDN博客_v-infinite-scroll网上搜索了很多,基本上都是指'vue-infinite-scroll'组件,其实如果你是elementUI项目的话,你可以直接使用v-infinite-scroll示例: <div style="height:100px;overflow: auto;" v-infinite-scroll="test"> <div style="height:200px">滚动...https://blog.csdn.net/qq_43702430/article/details/105737234我的思路是对el-table使用v-infinite-scroll,结果出现了如下情况(注意看滚动条)

 这里滚动到底不会触发下一次加载,必须要手动往上滚动一点,再往下滚动才行,回头翻了一下前面的两篇教程,发现应该是延迟的问题,于是我想到把定时器去掉不就行了吗

结果出现了另一个问题

列表会自动一直加载,原因是应为滚动条始终在底部,导致无限自动加载数据。

正常情况滚动条应该是不会始终在底部的,于是我怀疑是应为在el-table上面使用v-infinite-scroll的原因。毕竟百度出来的都是在div上面使用v-infinite-scroll,在el-table上使用el-table-infinite-scroll。

于是我换了个思路,使用div来模拟el-table

<div v-infinite-scroll="load" class="fake-table">
            <div class="fake-table-head">
              <div class="fake-th" style="width: 362px;">标题</div>
              <div class="fake-th" style="width: 180px;">上传时间</div>
              <div class="fake-th" style="width: 90px;">所需积分</div>
              <div class="fake-th" style="width: 140px;">下载量</div>
            </div>
            <div v-for="(item, index) in aMaterial" :key="index" class="fake-tr">
              <div class="fake-td truncate" style="width: 362px;">
                <span class="table-link" @click="toDetail(item)">{{item.fileName}}</span>
              </div>
              <div class="fake-td" style="width: 180px;">{{ $dayjs(item.creationDate).format('YYYY-MM-DD HH:mm:ss') || '-' }}</div>
              <div class="fake-td" style="width: 90px;">{{ item.creditsPrice }}</div>
              <div class="fake-td" style="width: 140px;">{{ item.downCount }}人下载</div>
            </div>
            <!--加载中、到底了-->
            <table-append v-if="showTableAppend" slot="append" :state="scrollTableState"></table-append>
          </div>

 最后总算是解决了这个问题,不知道还有没有别的方案可以替代,不然每个这种列表都要重复写代码,看起来很难受。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值