实现无分页的“加载更多”功能:隐藏已显示内容并动态展示新数据

夏磊酱_3743

夏磊酱_3743

2026-06-09

601人浏览

原创

实现无分页的“加载更多”功能:隐藏已显示内容并动态展示新数据

本文介绍如何使用 jquery 实现“加载更多”交互效果——每次点击按钮时隐藏已显示的内容,仅展示下一批新内容,无需后端分页逻辑,适用于静态或预加载数据场景。

本文介绍如何使用 jquery 实现“加载更多”交互效果——每次点击按钮时隐藏已显示的内容,仅展示下一批新内容,无需后端分页逻辑,适用于静态或预加载数据场景。

在构建内容流式展示(如博客摘要、产品列表或图库)时,传统分页(Pagination)虽稳定,但体验略显割裂;而无限滚动(Infinite Scroll)又可能造成内存压力或 SEO 不友好。一种轻量折中方案是:预加载全部数据到前端,通过 jQuery 动态控制可见性,实现“隐藏旧内容 + 展示新内容”的单页切换效果——即本文所探讨的“Load More without Pagination”。

该方案完全在前端完成,不依赖 PHP 分页参数(如 ?page=2),也无需 AJAX 请求后端,因此响应极快、部署简单,特别适合内容量适中(如 20–100 条)、结构统一的静态列表。

倚马公文-公文材料AI工作台
倚马公文-公文材料AI工作台

倚马公文是一款面向体制内材料写作的AI公文工作台。

下载

✅ 核心思路

  • 所有内容项统一标记为 .nextContent,初始全部 display: none;
  • 首次加载显示前 N 条(如 2 条);
  • 每次点击 #loadMore 时:
    • 隐藏当前已显示的所有项(利用 .slice(0, $click*2).hide() 精确控制);
    • 使用 .slice().slideDown() 展开下一批(如第 3–4 条、第 5–6 条……);
    • 当无可隐藏/可展开项时,自动隐藏按钮并提示“No More”。

? 完整实现代码



  <style>
    .nextContent {
      display: none;
      margin: 5px 0;
      padding: 8px 0;
      background: #f9f9f9;
      border: 1px solid #e0e0e0;
      text-align: center;
      border-radius: 4px;
      transition: all 0.3s ease;
    }
    #loadMore {
      padding: 10px 16px;
      width: 100%;
      max-width: 200px;
      display: block;
      margin: 20px auto;
      text-align: center;
      background-color: #33739E;
      color: white;
      border: none;
      border-radius: 4px;
      box-shadow: 0 1px 2px rgba(0,0,0,0.1);
      cursor: pointer;
      font-size: 14px;
      transition: all 0.3s ease;
    }
    #loadMore:hover:not(:disabled) {
      background-color: #2a5d7c;
      transform: translateY(-1px);
    }
    #loadMore:disabled {
      opacity: 0.6;
      cursor: not-allowed;
    }
  </style><div class="nextContent">内容项 #1</div>
<div class="nextContent">内容项 #2</div>
<div class="nextContent">内容项 #3</div>
<div class="nextContent">内容项 #4</div>
<div class="nextContent">内容项 #5</div>
<div class="nextContent">内容项 #6</div>
<div class="nextContent">内容项 #7</div>
<div class="nextContent">内容项 #8</div>
<div class="nextContent">内容项 #9</div>
<div class="nextContent">内容项 #10</div>

<button id="loadMore">加载更多</button>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script>
$(function() {
  const batchSize = 2; // 每次显示条数
  let loadedCount = 0;

  // 初始显示前 batch 条
  $(".nextContent").slice(0, batchSize).show();

  $("#loadMore").on('click', function(e) {
    e.preventDefault();

    // 隐藏当前已显示的所有项(即前 loadedCount * batchSize 条)
    $(".nextContent").slice(0, loadedCount * batchSize).hide();

    // 计算下一批起始索引与结束索引
    const start = loadedCount * batchSize;
    const end = start + batchSize;

    // 展开下一批(若存在)
    const $hiddenItems = $(".nextContent:hidden");
    $hiddenItems.slice(0, batchSize).slideDown(300);

    loadedCount++;

    // 检查是否已无隐藏项
    if ($hiddenItems.length <= 0) {
      $(this).prop('disabled', true).text('已到底部');
      // 可选:添加淡出动画
      // $(this).fadeOut(300);
    }

    // 平滑滚动至按钮位置(提升 UX)
    $('html, body').animate({
      scrollTop: $(this).offset().top - 60
    }, 400);
  });
});
</script>

⚠️ 注意事项与优化建议

  • 性能考量:此方案适合 ≤ 200 条 DOM 元素。若数据量极大(如上千条),建议改用虚拟滚动(Virtual Scrolling)或服务端分页 + AJAX。
  • SEO 友好性:所有内容在 HTML 中已存在,搜索引擎可正常抓取,优于纯 AJAX 加载。
  • 无障碍支持:为 #loadMore 添加 aria-live="polite" 可通知屏幕阅读器状态变化;禁用按钮时使用 aria-disabled="true" 更规范。
  • 移动端适配:.nextContent 建议添加 box-sizing: border-box;按钮宽度设为 max-width 防止小屏溢出。
  • 扩展性:如需支持“返回上一页”,可维护一个历史栈数组(如 historyStack = [[0,1], [2,3], [4,5]]),配合 slideUp()/slideDown() 实现双向导航。

该方案以简洁的 jQuery 逻辑,实现了媲美原生 App 的内容流切换体验,兼顾开发效率、用户体验与技术可控性,是中小型项目中值得复用的交互模式。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2403

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5163

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6230

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5798

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

823

5

js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

4726

5

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

2023.07.04

1189

3

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

2023.07.04

4664

6

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

2023.09.01

920

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习