【前端知识之JS】如何实现上拉加载和下拉刷新
前言
本系列主要整理前端面试中需要掌握的知识点。本节介绍如何实现上拉加载和下拉刷新。
文章目录
- 前言
- 一、介绍
- 二、实现原理
- 1、上拉加载
- 2、下拉刷新
一、介绍
- 下拉刷新和上拉加载这两种交互方式通常出现在移动端中;
- 本质上等同于PC网页中的分页,只是交互形式不同;
- 开源社区也有很多优秀的解决方案,如iscroll、better-scroll、pulltorefresh.js库等等,这些第三方库使用起来非常便捷;
- 这里我们通过原生的方式实现一次上拉加载,下拉刷新,有助于对第三方库有更好的理解与使用
二、实现原理
1、上拉加载
属性 | 含义 |
---|---|
offsetTop | 元素的上外边框至包含元素的上内边框之间的像素距离,其他方向相同 |
offsetWidth | 元素两端算上外边框的宽度,其他方向相同 |
scrollLeft 和 scrollTop | 既可以确定当前元素的滚动状态,也可以设置元素的滚动位置 |
scrollWidth 和 scrollHeight | 确定元素内容的实际大小 |
clientWidth | 元素内容区宽度加上左右内边距宽度,即clientWidth = content + padding |
clientHeight | 元素内容区高度加上上下内边距高度,即clientHeight = content + padding |
上拉加载的本质是页面触底,或者快要触底时的动作
触底公式:scrollTop + clientHeight >= offsetTop
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,元素回到初始位置。
<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);
【前端知识之JS】如何实现上拉加载和下拉刷新相关推荐
- better-scroll 上拉加载,下拉刷新(解决移动端长页面卡顿)
一.Better Scroll 滚动原理 1.下图能直观的表示better-scroll的滚动原理 2.html设置 <div class="wrapper"> < ...
- 基于iSroll 5.0实现的上拉加载和下拉刷新插件
Updownload.js 基于iSroll 5.0实现的上拉加载和下拉刷新插件 移动端效果比较好,开发者工具打开后,需要刷新下页面. [演示地址:] https://chenyk2016.githu ...
- 让你的微信小程序对用户更加友好:上拉加载和下拉刷新就是关键
前言 上拉加载和下拉刷新是小程序开发的常见需求.本文将介绍如何在微信小程序中实现上拉加载和下拉刷新的功能,为用户带来更加流畅.便捷的使用体验. 实现效果如下: 实现思路: 1. 首先需要在使用到的 j ...
- 如何实现上拉加载,下拉刷新?
如何实现上拉加载,下拉刷新? 一.前言 二.实现原理 上拉加载 下拉刷新 三.案例 小结 一.前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页,只是交互形式不同 ...
- 如何实现上拉加载和下拉刷新
下拉刷新和上拉加载这两种交互⽅式通常出现在移动端中 本质上等同于PC⽹⻚中的分⻚,只是交互形式不同 开源社区也有很多优秀的解决⽅案,如 iscroll . better-scroll . pullto ...
- 面试官:JavaScript如何实现上拉加载,下拉刷新?
一.前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页,只是交互形式不同 开源社区也有很多优秀的解决方案,如iscroll.better-scroll.pullto ...
- html5上拉下拉刷新,APP 上拉加载,下拉刷新 介绍
开发APP时,很多时候都会用上,上拉加载数据,下拉刷新等功能,本文件介绍两种. 一种是原生APP自带的上拉加载,下拉刷新功能,一种是用JS 插件写的上拉加载,下拉刷新. 1.原生APP 的 上拉加载, ...
- 小程序上拉加载,下拉刷新
小程序上拉加载,下拉刷新 data: {collectinformation: null,number: 1,size: 10,isOpenLoading: true,isEmpty: true,is ...
- tableview插入刷新_iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码...
废话不多说了,直接给大家贴代码了. 具体代码如下所示: #import "ViewController.h" #import "TuanGouModel.h" ...
最新文章
- 当adobe flash player不能安装时
- c 子类对象 访问父类对象受保护成员_java面向对象总结
- (77)FPGA时序违例及解决办法-面试必问(一)(第16天)
- nginx作用_nginx作用及其配置
- floating输入 高阻输入_STM32 GPIO八种输入输出模式
- Cocos2d-x Touch事件处理机制(better)
- Bootstrap 3.0正式版发布!
- 在netbeans中使用tomcat服务器的web应用,在NetBeans中创建Apache—Tomcat-web服务器
- java excel 2007兼容包_Microsoft Office 2007兼容包
- Linux下通过ssh上传、下载文件或者文件夹
- hlw8012电能测量芯片(多组功率电流测量)
- STC8H开发(十四): I2C驱动RX8025T高精度实时时钟芯片
- 组织结构流程图模板分享
- 纯MSDOS操作系统下的计算机重启与关机
- AutoCAD2013安装说明
- VB中的“msgbox”函数各参数详解
- 阿里云安全中心之漏洞修复最佳实践
- STM32--ADC
- 利用python自动在火狐浏览器上输入账号密码
- /lib//libclntsh.so: file format not recognized; treating as linker script
热门文章
- Java for Selenium | Java中的变量variable、常量constant、字面量Literal
- 一些想说的话,无关技术
- 使用jmeter自动生成测试报告
- linux脚本执行命令登录,Linux登录后自动执行脚本,系统基础信息一目了然
- 虚拟机克隆+虚拟机网络问题排查
- 支付宝扫码答奥数 5分钟做出来可免单
- python数据分析与展示--Pandas库入门
- 实验二第1关:谁是小偷?
- spring boot 前后端分离项目(商城项目)学习笔记
- 饥荒联机版服务器搭建_TGP饥荒联机版专用服务器怎么搭建?专用服务器搭建方法...