当前位置:首页 > JavaScript

js实现加载更多内容

2026-03-01 06:30:23JavaScript

实现滚动加载更多内容

使用Intersection Observer API监听元素进入视口,触发加载更多数据。这种方法性能较好,避免频繁计算滚动位置。

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      loadMoreData();
    }
  });
});

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

async function loadMoreData() {
  const response = await fetch('/api/data?page=' + currentPage);
  const newData = await response.json();
  appendDataToDOM(newData);
  currentPage++;
}

实现点击加载更多按钮

创建按钮点击事件处理程序,每次点击时获取新数据并追加到页面。

document.getElementById('load-more-btn').addEventListener('click', async () => {
  const response = await fetch('/api/data?page=' + currentPage);
  const newData = await response.json();

  newData.forEach(item => {
    const element = document.createElement('div');
    element.textContent = item.content;
    document.getElementById('content-container').appendChild(element);
  });

  currentPage++;

  if (currentPage >= totalPages) {
    document.getElementById('load-more-btn').disabled = true;
  }
});

实现无限滚动加载

监听窗口滚动事件,当接近底部时加载更多内容。需要添加防抖优化性能。

let isLoading = false;

window.addEventListener('scroll', debounce(() => {
  const { scrollTop, scrollHeight, clientHeight } = document.documentElement;

  if (scrollTop + clientHeight >= scrollHeight - 100 && !isLoading) {
    isLoading = true;
    loadMoreData().finally(() => isLoading = false);
  }
}, 200));

function debounce(fn, delay) {
  let timer;
  return function() {
    clearTimeout(timer);
    timer = setTimeout(() => fn.apply(this, arguments), delay);
  };
}

实现分页加载

维护当前页码状态,每次请求时递增页码参数。

let currentPage = 1;
const pageSize = 10;

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

  if (data.length > 0) {
    renderData(data);
    currentPage++;
  } else {
    showNoMoreData();
  }
}

实现虚拟滚动优化

对于大量数据,使用虚拟滚动技术只渲染可见区域内容。

js实现加载更多内容

const container = document.getElementById('virtual-scroll');
const contentHeight = 100000; // 总内容高度
const visibleItems = 10;
const itemHeight = 50;

container.style.height = `${visibleItems * itemHeight}px`;
container.addEventListener('scroll', () => {
  const scrollTop = container.scrollTop;
  const startIndex = Math.floor(scrollTop / itemHeight);

  renderItems(startIndex, startIndex + visibleItems);
});

function renderItems(start, end) {
  // 只渲染start到end范围内的项目
}

注意事项

确保添加加载状态提示和错误处理 合理设置节流/防抖时间避免频繁请求 移动端需要考虑触摸事件兼容性 服务端应支持分页参数 加载完成后可以禁用按钮或移除观察者

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

相关文章

vue实现页面加载

vue实现页面加载

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

vue实现懒加载

vue实现懒加载

Vue 实现懒加载的方法 懒加载(Lazy Loading)是一种优化技术,用于延迟加载非关键资源,从而提升页面初始加载速度。Vue 中可以通过多种方式实现懒加载,以下是几种常见方法: 路由懒加载…

vue怎么实现滚动加载

vue怎么实现滚动加载

滚动加载的实现方法 在Vue中实现滚动加载通常结合IntersectionObserver或监听滚动事件,动态加载数据。以下是两种常见实现方式: 使用IntersectionObserver API…

vue实现全局加载动画

vue实现全局加载动画

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

vue实现页面分段加载

vue实现页面分段加载

Vue 实现页面分段加载的方法 分段加载(Lazy Loading)是优化页面性能的常见手段,尤其在 Vue 中可以通过多种方式实现。以下是几种常见方法: 使用动态导入(Dynamic Import…

vue如何实现触底加载

vue如何实现触底加载

Vue 实现触底加载的方法 触底加载是常见的分页加载技术,通过监听滚动事件判断是否到达页面底部,触发数据加载。以下是 Vue 中的实现方式: 监听滚动事件 在 Vue 组件中,通过 @scroll…