关于v-infinite-scroll的使用(踩坑心路)

本文详细介绍了如何在Vue项目中使用Element-ui的无限滚动(v-infinite-scroll)功能,并分享了解决常见问题的经验,如事件不触发及阈值调整等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言       

         当今,随着手机的普及与使用。web端不在局限于pc端,移动开发至关重要。在移动端数据的更新中,许多方法孕育而生。无限滚轮也是解决的方案一种。Element-ui为vue开发了一个事件。(v-infinite-scroll)

使用方法

         在element-ui中有按需引入和全局引入的方法。底下有安装及配置方法我就细讲了!(加油)组件 | Elementhttps://element.eleme.cn/#/zh-CN/component/quickstart

 使用心得

        在使用这个组件中。我们先将他实例中的方法复制即可。

       

        (嗯???他怎么在一直触发。是我用的不对吗?不能啊,我是直接CTRL二连(C+V)的。怎么可能会错呢)于是乎便在网上找到了答案。

           害~正如网上说的,我并没有添加ul的高度且在这个组件的使用还得使用overflow才可以触发这个独一无二的事件。正当我满怀期待的去添加行内样式的时候。重新加载页面.....芜湖!!成功了!!我持续的向下滑鼠标滚轮。(嗯?一开始触发17次我滑一次18在滑一次并未触发。应该是没有触发事件。为什么呢?)带着疑问我又开始了摸索。

        摸索了许久后。身边的同事热心的告诉我。ul并没有铺满,所以触发不了。原来。Element-ui说明书底下拥有一个阈值。当完全触碰到底部才会触发。所以拥有一个可以调节的阀值。而且ul尽量的要铺满整个屏幕。避免使用外部的滚动条。因为外部的滚动条并没有对应的事件。或者将高度在提高一点。让触底的地方大于阀值从而更好的触发如果有其他的组件想导航栏还有底部栏的时候可以使用CSS3的属性calc计算。达到你想要的效果。使用方法是calc(100vh - xxpx - xxrem)可以减多种值。但注意里面的都要有空格隔开。具体描述我就不 一 一 介绍了。calc() - CSS(层叠样式表) | MDN (mozilla.org)https://developer.mozilla.org/zh-CN/docs/Web/CSS/calc()

 

 完整的代码我就放到底下。

<template>
  <div>
    <div class="box" />
    <ul v-infinite-scroll="load" class="infinite-list" style="overflow:auto;height:calc(100vh - 49px)">
      <li v-for="i in count" class="infinite-list-item">{{ i }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 0
    }
  },
  methods: {
    load() {
      console.log('我触发了')
      this.count += 2
    }
  }
}
</script>

<style>
.box{
  width: 100%;
  height: 50px;
  background-color: red;
  border: none;
}
</style>

### 使用 `v-el-table-infinite-scroll` 的示例 为了实现带有无限滚动功能的表格,可以利用 Element Plus 提供的组件以及自定义逻辑来处理数据加载。下面是一个完整的例子展示如何配置并使用 `el-table` 和 `v-infinite-scroll`。 #### 安装依赖库 首先确保已经安装了必要的包: ```bash npm install vue element-plus el-table-infinite-scroll ``` #### 导入模块 在项目中的入口文件(通常是 main.js 或类似的初始化脚本),添加如下导入语句[^1]: ```javascript import Vue from 'vue'; import ElTableInfiniteScroll from 'el-table-infinite-scroll'; Vue.use(ElTableInfiniteScroll); ``` #### 创建视图模板 接下来创建一个简单的 HTML 结构用于显示带无限滚动效果的数据表: ```html <template> <div style="height: 400px; overflow-y: auto;"> <!-- 表格容器 --> <el-table :data="tableData" @infinite-scroll="loadMore"> <el-table-column prop="date" label="日期"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </div> </template> <script> export default { data() { return { tableData: [], // 存储当前页面数据显示项 allItems: [] // 所有可获取的数据项集合 }; }, methods: { loadMore() { const newData = this.allItems.slice(this.tableData.length, this.tableData.length + 5); setTimeout(() => { this.tableData.push(...newData); }, 1000); if (this.tableData.length >= this.allItems.length) { console.log('No more items to load'); } }, fetchData() { // 模拟异步请求获取全部数据 fetch('/api/items') .then(response => response.json()) .then(data => { this.allItems = data; this.loadMore(); }); } }, mounted() { this.fetchData(); } }; </script> ``` 此代码片段展示了如何通过监听 `@infinite-scroll` 事件触发新的数据加载操作,并且每次只增加一部分新行至现有列表中,从而实现了平滑流畅的用户体验[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值