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

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

相关文章

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机