vue简单实现div滚动触底加载更多数据效果

本文介绍了如何在Vue中实现一个简单的div滚动到底部自动加载更多数据的效果。通过监听div的scroll事件,判断是否达到底部,然后更新页数并调用后台接口获取新数据。关键CSS样式为设置高度和overflow属性。

vue简单实现div滚动触底加载更多数据效果

1,html

<div class="webTherapyAuditList"  @scroll="handleScroll($event)">
div里放置一些需要滚动加载的信息,滚动函数通过@scroll触发
</div>

2,js

// 获取页面滚动距离
      handleScroll (e) {
        let el = e.target
        //判断是否到达div容器底部
       if(el.scrollTop+el.clientHeight>=el.scrollHeight){
       	//控制页数
          this.pagesize=this.pagesize+1
          //调用后台接口
          this.getAuditRecipeList()
        }
      },

3,css

 .webTherapyAuditList{
 	//要想scroll事件生效,必须给目标div编写下面两个样式。
    height: 102%;
    overflow-y: auto;
  }
### Vue2 中实现 `div` 元素垂直滚动触底分页加载 #### 方法概述 为了实现Vue2 项目中的 `div` 元素内进行垂直滚动并检测到触底时触发分页加载的功能,可以采用监听滚动事件的方式,并结合节流技术来优化性能。具体来说,在每次滚动发生时计算当前可视区域的高度以及整个容器的内容高度,以此判断是否接近底部[^1]。 #### 关键逻辑说明 当用户的滚动操作使得视窗内的可见部分接近或达到设定阈值(通常是距离最下方一定像素范围内)时,则认为已经到达了“触底”,此时应发起请求获取新一批的数据项用于追加显示[^3]。 #### 示例代码实现 下面是一个完整的例子展示了如何利用 JavaScript 和 Vue 来完成这一功能: ```html <template> <div ref="scrollContainer" class="scroll-container"> <!-- 列表内容 --> <ul v-if="items.length > 0"> <li v-for="(item, index) in items" :key="index">{{ item }}</li> </ul> <!-- 加载指示符 --> <p v-show="loading">正在加载...</p> <!-- 结束提示 --> <p v-if="noMoreData && !loading">没有更多数据</p> </div> </template> <script> export default { data() { return { page: 1, pageSize: 10, totalItems: [], // 所有项目的集合 items: [], loading: false, noMoreData: false, throttleTimeoutId: null, }; }, mounted() { this.fetchData(); window.addEventListener('resize', this.handleScroll); const container = this.$refs.scrollContainer; if (container) { container.addEventListener('scroll', this.throttledHandleScroll); } }, beforeDestroy() { window.removeEventListener('resize', this.handleScroll); const container = this.$refs.scrollContainer; if (container) { container.removeEventListener('scroll', this.throttledHandleScroll); } }, methods: { fetchData(callback) { // 模拟异步请求接口 setTimeout(() => { let newItems = Array.from({ length: this.pageSize }, (_, i) => `${this.page * this.pageSize + i}` ); this.totalItems.push(...newItems); callback?.(); this.items = [...this.totalItems]; this.loading = false; if (this.totalItems.length >= TOTAL_ITEMS_COUNT) { // 定义全局变量TOTAL_ITEMS_COUNT表示总条目数 this.noMoreData = true; } else { this.page++; } }, 500); // 模拟网络延迟时间 }, handleScroll(event) { clearTimeout(this.throttleTimeoutId); this.throttleTimeoutId = setTimeout(() => { this.checkIfNearBottom(); }, 200); // 设置节流间隔时间为200ms }, throttledHandleScroll(event) { this.handleScroll(event); }, checkIfNearBottom() { const container = this.$refs.scrollContainer; if (!container || this.loading || this.noMoreData) return; const scrollTop = container.scrollTop; const clientHeight = container.clientHeight; const scrollHeight = container.scrollHeight; if ((scrollTop + clientHeight) >= (scrollHeight - 1)) { this.loadMore(); } }, loadMore() { if (!this.loading && !this.noMoreData) { this.loading = true; this.fetchData(); // 获取下一页的数据 } } } }; </script> <style scoped> /* 添加样式使 .scroll-container 可以滚动 */ .scroll-container { height: 400px; /* 设定固定高度以便于测试 */ overflow-y: auto; } </style> ``` 此段代码实现了在一个具有特定类名 `.scroll-container` 的 `div` 内部执行基于滚动位置的懒加载机制。每当用户向下滚动至接近该容器底部时就会自动调用 `loadMore()` 函数去抓取额外的信息片段直至全部加载完毕为止[^2]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值