当前位置:首页 > JavaScript

js 加载更多实现

2026-04-04 00:22:25JavaScript

滚动监听实现加载更多

通过监听滚动事件,判断是否滚动到页面底部触发加载。核心是计算scrollTopclientHeightscrollHeight的关系:

window.addEventListener('scroll', function() {
  const { scrollTop, clientHeight, scrollHeight } = document.documentElement;
  if (scrollTop + clientHeight >= scrollHeight - 5) {
    loadMoreData();
  }
});

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

Intersection Observer API实现

现代浏览器推荐使用Intersection Observer API,性能更好:

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

const sentinel = document.createElement('div');
sentinel.id = 'sentinel';
document.body.appendChild(sentinel);
observer.observe(sentinel);

分页参数控制

后端API通常需要分页参数控制数据获取:

let currentPage = 1;
const pageSize = 10;

async function loadMoreData() {
  const data = await fetch(`/api/data?page=${currentPage}&size=${pageSize}`);
  currentPage++;
  renderData(data);
}

加载状态管理

避免重复请求需要管理加载状态:

let isLoading = false;

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

  isLoading = true;
  showLoadingIndicator();

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

虚拟滚动优化

对于大量数据,考虑虚拟滚动技术:

js 加载更多实现

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

<List
  height={500}
  itemCount={1000}
  itemSize={50}
  width={300}
>
  {({ index, style }) => (
    <div style={style}>Row {index}</div>
  )}
</List>

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

相关文章

vue 实现异步加载

vue 实现异步加载

Vue 异步加载的实现方法 动态导入组件(懒加载) 使用 import() 语法动态导入组件,Vue 会将其转换为异步加载的组件。适用于路由或组件按需加载。 const AsyncComponent…

vue实现无线加载

vue实现无线加载

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

vue实现加载动画

vue实现加载动画

Vue 实现加载动画的方法 在 Vue 中实现加载动画可以通过多种方式完成,以下是一些常见的方法: 使用 CSS 动画 通过 CSS 定义动画效果,结合 Vue 的动态类绑定实现加载动画。以下是一个…

vue 实现更多展开

vue 实现更多展开

Vue 实现更多展开功能 在 Vue 中实现“更多展开”功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-show 或 v-if 控制显示 通过 Vue 的指令 v-show 或 v-…

vue实现全局加载动画

vue实现全局加载动画

使用Vue插件封装全局加载动画 在Vue项目中创建一个自定义插件,通过Vue的插件系统实现全局调用。 创建src/plugins/loading.js文件: const Loading = {…

vue如何实现数据加载

vue如何实现数据加载

数据绑定与响应式更新 Vue 通过响应式系统实现数据加载与渲染。在 data 或 setup 中定义初始数据,模板中通过插值表达式 {{ }} 或指令(如 v-bind)绑定数据。数据变化时,视图自动…