移动端实现下拉刷新和上拉加载(内含案例)

embedded/2024/10/9 2:08:57/

前端开发中,上拉加载下拉刷新常用于实现内容的动态加载,尤其在移动端的应用中。下面我将提供一个简单的示例和逻辑说明。

1. 逻辑说明:

  • 下拉刷新

    • 用户向下拖动页面顶部,触发一个事件,刷新当前内容。
    • 需要检测页面的 scrollTop 为 0 时的拖动行为。
  • 上拉加载

    • 用户滚动到页面底部时,触发数据加载事件,加载更多内容。
    • 需要检测页面的 scrollHeightclientHeight 之间的距离接近为 0 时的滚动行为。

2. 案例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>上拉加载 & 下拉刷新</title><style>body {margin: 0;padding: 0;font-family: Arial, sans-serif;}#content {height: 100vh;overflow-y: auto;}.item {padding: 20px;border-bottom: 1px solid #ccc;}.loading {text-align: center;padding: 20px;display: none;}</style>
</head>
<body><div id="content"><div id="items"></div><div class="loading" id="loading">加载中...</div></div><script>javascript">const content = document.getElementById('content');const items = document.getElementById('items');const loading = document.getElementById('loading');// 模拟初始内容加载let page = 1;function loadItems() {for (let i = 0; i < 10; i++) {const div = document.createElement('div');div.className = 'item';div.innerText = 'Item ' + (items.children.length + 1);items.appendChild(div);}}loadItems();// 下拉刷新let startY = 0;content.addEventListener('touchstart', (e) => {if (content.scrollTop === 0) {startY = e.touches[0].pageY;}});content.addEventListener('touchmove', (e) => {const moveY = e.touches[0].pageY;if (moveY - startY > 100 && content.scrollTop === 0) {// 模拟刷新操作alert('刷新页面');items.innerHTML = '';loadItems();}});// 上拉加载更多content.addEventListener('scroll', () => {if (content.scrollTop + content.clientHeight >= content.scrollHeight) {loading.style.display = 'block';setTimeout(() => {loadItems();loading.style.display = 'none';}, 1000); // 模拟加载延迟}});</script>
</body>
</html>

3. 逻辑详细说明:

  • 下拉刷新

    • 通过 touchstart 获取用户的起始触摸点,并在 touchmove 事件中判断是否有下拉行为(页面滚动条处于顶部时)。
    • 一旦检测到下拉超过一定距离(如100px),执行刷新操作,如重新加载页面内容。
  • 上拉加载

    • 通过 scroll 事件监测用户的滚动行为,检测当前滚动条位置是否接近页面底部。
    • scrollTop + clientHeight 等于或超过 scrollHeight 时,触发加载更多内容的操作,显示“加载中”提示,并在短暂延迟后加载更多数据。

这种实现方式适用于简单的内容列表,可以根据需求调整加载条件与显示样式。


http://www.ppmy.cn/embedded/124067.html

相关文章

Windows系统编程(三)进程与线程二

进程与线程 进程&#xff1a;直观的说就是任务管理器中各种正在运行的程序。对于操作系统来说&#xff0c;进程仅仅是一个数据结构&#xff0c;并不会真实的执行代码 线程&#xff1a;通常被称作但并不真的是轻量级进程或实际工作中的进程&#xff0c;它会真实的执行代码。每…

基于微信小程序的生鲜订购小程序系统(SpringBoot+Vue+Uniapp+MySQL)

3. 论文参考 4. 项目运行截图 5. 技术框架 5.1 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring …

基于epoll的Reactor模型

一、代码展示 1、主函数 main.cc&#xff08;第一级别&#xff09; 先控制台获取服务器的端口号&#xff0c;绑定端口号IP地址。PackageParse作为报文解析并发送接收报文的中间类&#xff0c;Listener是服务器的监听套接字&#xff0c;HandlerConnection是连接套接字&#xff…

爬虫(Python版本)

1.爬虫的法律问题 爬虫技术&#xff08;Web Scraping&#xff09;指通过程序自动访问网页并提取其中的数据。在使用爬虫的过程中&#xff0c;涉及到一些法律法规和合规性问题。 常见法律风险 ①未经授权的访问&#xff1a;很多网站对爬虫行为设置了限制。如果未获得授权就进行…

Kotlin:2.0.20 的新特性

一、概述 Kotlin 2.0.20英文版官方文档 Kotlin 2.0.20发布了!这个版本包括对Kotlin 2.0.0的性能改进和bug修复&#xff0c;我们在其中宣布Kotlin K2编译器为Stable。以下是本次发布的一些亮点: 数据类复制函数将具有与构造函数相同的可见性来自默认目标层次结构的源集的静态访…

master节点k8s部署]33.ceph分布式存储(四)

总结ceph分布式存储&#xff08;三&#xff09;中提到的三种方法&#xff1a; 1.创建rbda&#xff0c;并且在创建pv的时候配置该rbda,以下代码仅展示关键信息。 [rootxianchaomaster1 ~]# cat pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: ceph-pv ...…

pytorch之自动求导

在 PyTorch 的 autograd 功能中&#xff0c;主要有几个核心概念和操作&#xff1a; 1. torch.Tensor 和 .requires_grad 属性 torch.Tensor: 这是 PyTorch 中的核心数据结构&#xff0c;类似于 NumPy 数组&#xff0c;但也可用于 GPU 加速计算。.requires_grad: 这是 Tensor …

SpringBoot实现:星之语明星周边销售平台开发指南

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…