当前位置:首页 > JavaScript

js 加载更多实现

2026-01-30 08:48:26JavaScript

滚动监听实现加载更多

通过监听滚动事件判断是否到达页面底部触发加载。核心逻辑是计算滚动条位置与文档高度的关系。

window.addEventListener('scroll', function() {
  const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
  const windowHeight = window.innerHeight;
  const scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;

  if (scrollTop + windowHeight >= scrollHeight - 100) {
    loadMoreData();
  }
});

function loadMoreData() {
  // 获取新数据并渲染到页面
}

Intersection Observer API

现代浏览器推荐使用的API,性能优于滚动监听。通过观察目标元素与视口的交叉状态触发回调。

js 加载更多实现

const observer = new IntersectionObserver((entries) => {
  if (entries[0].isIntersecting) {
    loadMoreData();
  }
}, {threshold: 0.1});

observer.observe(document.querySelector('#load-more-trigger'));

分页加载实现

配合后端API实现分页加载,通常需要维护当前页码或游标。

js 加载更多实现

let currentPage = 1;
const pageSize = 10;

async function loadMoreData() {
  const response = await fetch(`/api/data?page=${currentPage}&size=${pageSize}`);
  const newData = await response.json();

  renderData(newData);
  currentPage++;

  if (newData.length < pageSize) {
    removeLoadMoreTrigger();
  }
}

虚拟滚动优化

对于超长列表建议使用虚拟滚动技术,只渲染可视区域内的元素。

// 使用现有库如react-window或vue-virtual-scroller
import { FixedSizeList } from 'react-window';

const Row = ({ index, style }) => (
  <div style={style}>Row {index}</div>
);

const List = () => (
  <FixedSizeList
    height={600}
    itemCount={1000}
    itemSize={35}
    width={300}
  >
    {Row}
  </FixedSizeList>
);

加载状态处理

添加加载状态避免重复请求和改善用户体验。

let isLoading = false;

async function loadMoreData() {
  if (isLoading) return;

  isLoading = true;
  showLoadingIndicator();

  try {
    const data = await fetchData();
    renderData(data);
  } catch (error) {
    showError(error);
  } finally {
    isLoading = false;
    hideLoadingIndicator();
  }
}

无限滚动注意事项

  • 移动端需要考虑滚动性能优化
  • 需要提供回到顶部按钮
  • 数据量过大时应考虑分页或搜索过滤
  • 注意内存管理,避免长时间运行导致内存泄漏

标签: 加载更多
分享给朋友:

相关文章

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 在模板中通过 v-if 或 v-show 控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,而 v-show 仅…

加载jquery

加载jquery

加载 jQuery 的方法 通过 CDN 加载 推荐使用官方或公共 CDN(内容分发网络)加载 jQuery,速度快且稳定。将以下代码添加到 HTML 文件的 <head> 或 <b…

vue加载实现分页

vue加载实现分页

Vue 实现分页加载的方法 使用 Element UI 的分页组件 安装 Element UI 后,可以直接使用其分页组件。在模板中添加分页组件,并绑定相关事件和数据。 <template&g…

react如何延迟加载

react如何延迟加载

延迟加载的实现方法 在React中实现延迟加载(Lazy Loading)通常指按需加载组件或资源,以提升初始页面加载性能。以下是几种常见方法: 使用React.lazy和Suspense Reac…

vue实现页面加载

vue实现页面加载

Vue 实现页面加载的方法 在 Vue 中实现页面加载效果可以通过多种方式完成,以下是几种常见的方法: 使用 v-if 或 v-show 控制加载状态 通过绑定一个布尔值来控制加载动画的显示与隐藏。…

vue 实现模块加载

vue 实现模块加载

Vue 实现模块加载的方法 使用动态导入(Dynamic Import) 动态导入是 ECMAScript 模块系统的特性,Vue 项目可以通过 import() 语法实现按需加载模块。这种方式在构建…