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

news/2024/10/5 0:30:38 标签: javascript, 前端, 开发语言

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

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.niftyadmin.cn/n/5690506.html

相关文章

【FFmpeg 深度解析】:全方位视频合成

前言 FFmpeg 是一个强大的多媒体处理工具&#xff0c;广泛用于视频、音频、图像等多媒体文件的转换、编辑和合成。本文将详细介绍如何使用 FFmpeg 将图片、字幕和音频合成为高质量的视频&#xff0c;并涵盖一些高级功能和技巧。 1. 准备素材 在开始之前&#xff0c;确保你已经…

【编辑距离算法】力扣72. 编辑距离

给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1&#xff1a; 输入&#xff1a;word1 “horse”, word2 “ros” 输出&#x…

基于Springboot+VUE的二手奢侈品商城的设计与实现

一、摘要 当前&#xff0c;二手奢侈品市场持续蓬勃发展&#xff0c;吸引了越来越多的消费者。然而&#xff0c;现有的二手奢侈品交易平台在用户体验、安全性和功能方面仍存在一些问题&#xff0c;需要进一步改进。本研究旨在设计和实现一种基于Spring Boot 和 Vue 技术框架的二…

数字 1 出现的个数

给定一个整数 n&#xff0c;计算所有小于等于 n 的非负整数中数字 1 出现的个数。 示例 1&#xff1a; 输入&#xff1a;n 13 输出&#xff1a;6示例 2&#xff1a; 输入&#xff1a;n 0 输出&#xff1a;0提示&#xff1a; 0 < n < 109 class Solution { public:i…

ZLMediaKit编译运行

ZLMediaKit-github官网 快速开始 代码依赖与版权声明 MediaServer支持的HTTP MediaServer支持的HTTP HOOK API cd ZLMediaKit mkdir build cd build cmake … && make -j20 cd ZLMediaKit/release/linux/Debug ./MediaServer //./MediaServer -h 查看 //./MediaSe…

前端媒体查询的用法及案例

媒体查询&#xff1a;实现响应式设计的强大工具 在数字时代&#xff0c;网页必须适应各种设备和屏幕尺寸&#xff0c;以满足用户不断变化的需求。这就是响应式设计的重要性所在&#xff0c;而媒体查询&#xff08;Media Queries&#xff09;则是实现这一目标的强大工具。本文将…

QT学习笔记2.1(安装部署_QT Creator安装)

QT学习笔记2.1&#xff08;QT Creator安装&#xff09; 我目前主要使用msvc进行编译运行。 Qt Creator 的下载与安装 - wenglabs - 博客园 Qt - Qt Creator下载与安装 - [BORUTO] - 博客园 Qt 添加MSVC2017编译器&#xff08;2022年保姆级教程&#xff0c;不安装完整VS&#x…

0基础学习CSS(十六)尺寸和Display(显示) 与 Visibility(可见性)

CSS 尺寸 (Dimension) 所有CSS 尺寸 (Dimension)属性 属性描述height设置元素的高度。line-height设置行高。max-height设置元素的最大高度。max-width设置元素的最大宽度。min-height设置元素的最小高度。min-width设置元素的最小宽度。width设置元素的宽度。 CSS Display(显…