如何实现上拉加载,下拉刷新

2024-05-14 00:28
文章标签 实现 加载 刷新 上拉

本文主要是介绍如何实现上拉加载,下拉刷新,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上拉加载,下拉刷新这两种交互,经常出现在移动端中,本质上和PC网页的分页一样,只是交互形式不同而已。

开源社区中有很多的方案,比如:isscroll、better-scroll、pulltorefresh.js,这些第三方库使用起来非常便捷。

上拉加载以及下拉刷新都依赖于用户交互,最重要的是理解在什么场景,什么时机下触发交互动作。

上拉加载

上拉加载本质上就是页面触底,或者是快要触底的时候触发。

判断页面触底,就需要使用到这几个属性:

  • scrollTop:滚动区域的高度到window顶部的距离,它会随着往上滚动而不断增加,初始值为0,它是一个动态值。
  • clientHeight:表示屏幕可视区域的高度
  • scrollHeight:页面不能滚动的时候也存在,这时候scrollHeight等于clientHeight。scrollHeight表示body内所有元素的总高度,包括body的padding

触底公式:scrollTop + clientHeight >= scrollHeight

实现代码:

let clientHeight = document.documentElement.clientHeight; //浏览器的高度
let scrollHeight = document.body.scrollHeight;
let scrollTop = document.documentElement.scrollTop;
let distance = 50; // 距离视窗还有50的时候,开始触发
if ((scrollTop + clientHeight) >= (scrollHeight - distance)) {console.log(" 加载数据");
}

下拉刷新

下拉刷新是页面触顶,用户下来时需要触发。

实现下拉刷新分为三步:

  • 监听原生touchstart事件,记录它的初始位置:e.touches[0].pageY
  • 监听原生touchmove事件,记录并计算当前滑动的位置与初始位置的差距,大于0表示向下拉动,并且借助css的translateY属性,让元素跟随手势向下滑动对应的差值,同时也设置一个允许滑动的最大差值;
  • 监听touchend事件,如果这时候元素滑动达到最大值,那就触发Callback,同时将translateY重置为0,元素回到初始位置。

HTML代码如下:

  <main><p class="refreshText"></p><ul id="refreshContainer"><li>111</li><li>222</li><li>333</li><li>444</li><li>555</li>...</ul></main>

监听touchstart事件,记录初始值:

var _element = document.getElementById('refreshContainer'),_refreshText = document.querySelector('.refreshText'),_startPos = 0, // _transitionHeight = 0; // 
_element.addEventListener('touchstart', function (e) {_startPos = e.touches[0].pageY; // _element.style.position = 'relative';_element.style.transition = 'transform 0s';
}, false);

监听touchmove移动事件,记录滑动差值:

_element.addEventListener('touchmove', function (e) {// e.touches[0].pageY _transitionHeight = e.touches[0].pageY - _startPos; // if (_transitionHeight > 0 && _transitionHeight < 60) {_refreshText.innerText = ' ';_element.style.transform = 'translateY(' + _transitionHeight + 'px)';if (_transitionHeight > 55) {_refreshText.innerText = ' ';}}
}, false);

最后监听touchend事件:

_element.addEventListener('touchend', function (e) {_element.style.transition = 'transform 0.5s ease 1s';_element.style.transform = 'translateY(0px)';_refreshText.innerText = ' ...';// todo...
}, false);

这三个事件就是从下拉到松手的过程:

  1. 当前手势滑动位置与初始位置差值大于0的时候,提示正在进行下拉刷新操作
  2. 下拉到一定值时,显示松手释放后的操作提示
  3. 下来到设定最大值的时候,松手,执行回调,提示正在进行更新操作

在实际的开发中,更多可能会使用第三方库,这样减少很多的工作量,如果自己封装的话,还得考虑兼容性,易用性和性能等等。

这篇关于如何实现上拉加载,下拉刷新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987232

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J