原生js如何实现上拉加载下拉刷新?


一、前言

下拉刷新和上拉加载这两种交互方式通常出现在移动端中
本质上等同于PC网页中的分页,只是交互形式不同
在这里插入图片描述

二、实现原理

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

1.上拉加载

在这里插入图片描述

上拉加载的本质是页面触底,或者快要触底时的动作

判断页面触底我们需要先了解一下下面的几个属性

  • scrollTop:滚动视窗的高度距离window顶部的距离,他会随着往上滚动而不断增加,初始值是0,它是一个变化的值。
  • clientHeight:它是一个定值,表示屏幕可视区域的高度。
  • scrollHeight:页面不能滚动时时不存在的,body长度超过window时才会出现,所表示body所有元素的长度。

综上我们得出一个触底公式:

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("开始加载数据");
}

2.下拉刷新

下拉刷新的本质是页面本事置于顶部时,用户下拉时需要触发的动作。

关于下拉刷新的原生实现,主要分为三步:

  • 监听原生touchstart事件,记录其初始位置的值,e.touches[0].pageY;
  • 监听原生touchmove事件,记录并计算当前滑动的位置值与初始位置值的差值,大于0表示向下拉动,并借助CSS3的translateY属性使元素跟随手势向下滑动对应的差值,同时也应设置一个允许滑动的最大值;
  • 监听原生touchend事件,若此时元素滑动达到最大值,则触发callback,同时将translateY重设为0,元素回到初始位置

从上面可以看到,在下拉到松手的过程中,经历了三个阶段:

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

小结

下拉刷新、上拉加载原理本身都很简单,真正复杂的是封装过程中,要考虑的兼容性、易用性、性能等诸多细节

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏兮颜☆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值