当前位置:首页 > 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();
  }
}

无限滚动注意事项

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

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

相关文章

jquery页面加载

jquery页面加载

jQuery 页面加载事件 在 jQuery 中,页面加载事件通常通过 $(document).ready() 或简写的 $() 来实现。这种方式确保代码在 DOM 完全加载后执行,但无需等待图片等资…

vue实现加载条

vue实现加载条

Vue 实现加载条的方法 使用第三方库(如 NProgress) 安装 NProgress 库: npm install nprogress 在 Vue 项目中引入并使用: import…

vue实现无线加载

vue实现无线加载

无限滚动加载的实现 在Vue中实现无限滚动加载(Infinite Scroll)可以通过监听滚动事件或使用现成的库完成。以下是两种常见方法: 使用原生滚动事件监听 通过监听滚动事件判断是否到达页面…

vue实现显示更多

vue实现显示更多

Vue实现显示更多功能 在Vue中实现"显示更多"功能通常涉及动态控制内容的显示长度,并在用户点击时展开完整内容。以下是几种常见实现方式: 使用v-show或v-if控制显示 通过布尔值控制内容的展…

vue实现延迟加载

vue实现延迟加载

Vue 实现延迟加载的方法 使用动态导入(Dynamic Import)和异步组件 在 Vue 中,可以通过动态导入语法结合异步组件实现延迟加载。这种方式会在需要时才加载组件,而不是在初始加载时一并加…

vue实现滚动加载

vue实现滚动加载

滚动加载的实现方法 滚动加载是一种常见的前端交互方式,适用于长列表或数据量大的场景。Vue中可以通过监听滚动事件或使用Intersection Observer API实现。 使用滚动事件监听 在…