【 H5触底滚动分页加载】

本文介绍如何利用JavaScript实现网页的瀑布流滚动加载功能。当用户滚动到页面底部时,会自动加载更多内容,适用于展示长列表。关键在于判断滚动条是否到达底部的逻辑,通过比较scrollTop、clientHeight和scrollHeight来实现。此外,还提供了添加和移除滚动事件的方法。

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

网页实现滚动分页加载

瀑布流滚动加载,用于展示长列表,当列表即将滚动到底部时,会触发事件并加载更多列表项。

请添加图片描述

技术准备

核心属性:

					scrollTop: 网页被卷去内容得高度

​					clientHeight: 当前可视区域的高度

​					scrollHeight: 文档流高度

​					distance:页面到达底部多远距离触发

判断是否到达底部公式:

scrollTop+clientHeight>=scrollHeight-distance

具体判断方法

 /**

  \* 添加滚动事件

  */

 addScroll(): void {

  window.addEventListener("scroll", this.watchScroll, true);

 }
 /**

  \* 移除滚动事件

  */

 removeScroll(): void {

  window.removeEventListener("scroll", this.watchScroll, true);

 }
 // 滚动分页,屏幕滚动事件回调

 watchScroll(): void {

  // 滚动条到底部且没有完成搜索(还有更多数据)

  if (this.isWindowBottom() && !this.pageFinished) {

   ++this.currentPage;

   this.recieveRecommend();

  }

 }
 // 滚动分页,判断当前滚动条是否已到达底部

 public isWindowBottom(): boolean {

  // 滚动条滚动时,距离顶部的距离

  const scrollTop =

   document.documentElement.scrollTop || document.body.scrollTop;

  // 可视区的高度,数值上与“滚动条滚轮的高度”相等,只是长度单位不同

  const windowHeight =

   document.documentElement.clientHeight || document.body.clientHeight;

  // 滚动条的总高度

  const scrollHeight =

   document.documentElement.scrollHeight - 100 ||

   document.body.scrollHeight - 100;

  return scrollTop + windowHeight >= scrollHeight;

 }

### UniApp 中实现上拉触底加载更多内容 在 UniApp 开发中,为了提升用户体验并优化性能,通常会采用分页加载的方式处理大量数据展示。具体来说,在用户滚动面底部时触发新的数据请求来动态增加列表项。 #### 使用 `onReachBottom` 生命周期函数监听触底事件 对于 H5 和 App 平台而言,可以利用框架内置的生命周期钩子 `onReachBottom()` 来检测用户的浏览行为是否达到了视窗边界[^1]: ```javascript export default { data() { return { listData: [], // 存储获取的数据数组 page: 1, // 当前码,默认第一 pageSize: 10,// 每次加载条目数量 hasMore: true// 是否还有更多数据可加载 } }, methods: { async fetchList(page) { const res = await someApiCall({page, size:this.pageSize}); this.listData.push(...res.data); this.page++; if (res.total <= this.listData.length){ this.hasMore=false; } } }, onReachBottom(){ if (!this.hasMore){return;} this.fetchList(this.page); } } ``` 这段代码展示了如何设置一个简单的分页机制,并通过调用 API 接口不断追加新一批商品信息至现有集合内;同时判断服务器返回总记录数与本地已保存的数量对比决定是否关闭后续加载开关。 #### 处理特殊场景下的注意事项 需要注意的是,在某些特定情况下(比如设置了固定高度的 `scroll-view`),默认方式可能无法正常工作。此时建议改用组件内部提供的回调函数来进行交互操作[^2]: ```html <template> <view class="container"> <!-- 列表容器 --> <scroll-view :style="{height:`${scrollViewHeight}px`}" @scrolltolower="loadMore"> ... </scroll-view> <!-- 提示符 --> <text v-if="!hasMore">没有更多了</text> </view> </template> ``` 这里引入了一个名为 `@scrolltolower` 的事件处理器用于替代原有的全局侦听器,从而确保即使是在有明确尺寸限制的情况下也能保持良好的响应效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值