当前位置:首页 > JavaScript

js实现滚动加载

2026-04-04 05:12:08JavaScript

滚动加载的实现方法

滚动加载(Infinite Scroll)是一种常见的前端技术,通过监听滚动事件动态加载更多内容。以下是几种实现方式:

监听滚动事件 通过监听窗口或容器的滚动事件,判断是否滚动到底部触发加载:

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

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

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

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

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

实现注意事项

  • 节流处理:滚动事件需要节流,避免频繁触发
  • 加载状态:需要设置加载状态,防止重复请求
  • 错误处理:网络请求需要错误处理和重试机制
  • 移动端适配:需要考虑移动端触摸滚动特性

完整示例代码

js实现滚动加载

let isLoading = false;
let currentPage = 1;

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

  isLoading = true;
  try {
    const data = await fetch(`/api/data?page=${currentPage}`);
    renderData(data);
    currentPage++;
  } catch (error) {
    console.error('加载失败', error);
  } finally {
    isLoading = false;
  }
}

// 使用Intersection Observer
const observer = new IntersectionObserver((entries) => {
  if (entries[0].isIntersecting && !isLoading) {
    loadMoreData();
  }
}, {threshold: 0.1});

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

性能优化建议

  • 使用虚拟列表技术处理大量数据
  • 考虑使用骨架屏提升用户体验
  • 实现提前加载,避免用户看到空白
  • 移动端注意滚动性能优化

以上方法可以根据具体项目需求选择或组合使用。现代前端框架如React、Vue等也有相应的无限滚动组件可供选择。

标签: 加载js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…