当前位置:首页 > 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 实现异步加载的方法 使用动态 import 实现组件懒加载 在 Vue 中可以通过动态 import() 语法实现组件的异步加载,这会使得组件在需要时才被加载,减少初始加载时间。 const…

react如何加载网页

react如何加载网页

使用 React 加载网页的方法 通过 iframe 嵌入网页 在 React 组件中,可以通过 iframe 标签直接加载外部网页。这种方式简单直接,适合嵌入第三方页面或静态内容。 imp…

vue实现触底加载

vue实现触底加载

触底加载的实现方法 在Vue中实现触底加载功能,可以通过监听滚动事件或使用Intersection Observer API来实现。以下是两种常见的方法: 监听滚动事件 在组件中监听滚动事件,计算…

vue实现加载更多

vue实现加载更多

Vue 实现加载更多功能 在 Vue 中实现加载更多功能通常涉及监听滚动事件或点击按钮触发加载更多数据。以下是几种常见的实现方式: 滚动监听实现无限滚动 通过监听滚动事件,当用户滚动到页面底部时自动…

vue实现图片预加载

vue实现图片预加载

图片预加载的实现方法 在Vue中实现图片预加载可以提升用户体验,避免图片加载延迟导致的空白或闪烁。以下是几种常见的方法: 使用JavaScript的Image对象 创建一个Image对象并设置其sr…

vue懒加载实现方案

vue懒加载实现方案

vue懒加载实现方案 路由懒加载 使用动态导入语法实现路由级别的懒加载,适用于Vue Router配置。通过import()函数返回Promise,Webpack会自动分割代码块。 const ro…