前言

本系列主要整理前端面试中需要掌握的知识点。本节介绍如何实现上拉加载和下拉刷新。

文章目录

  • 前言
  • 一、介绍
  • 二、实现原理
    • 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】如何实现上拉加载和下拉刷新相关推荐

  1. better-scroll 上拉加载,下拉刷新(解决移动端长页面卡顿)

    一.Better Scroll 滚动原理 1.下图能直观的表示better-scroll的滚动原理 2.html设置 <div class="wrapper"> < ...

  2. 基于iSroll 5.0实现的上拉加载和下拉刷新插件

    Updownload.js 基于iSroll 5.0实现的上拉加载和下拉刷新插件 移动端效果比较好,开发者工具打开后,需要刷新下页面. [演示地址:] https://chenyk2016.githu ...

  3. 让你的微信小程序对用户更加友好:上拉加载和下拉刷新就是关键

    前言 上拉加载和下拉刷新是小程序开发的常见需求.本文将介绍如何在微信小程序中实现上拉加载和下拉刷新的功能,为用户带来更加流畅.便捷的使用体验. 实现效果如下: 实现思路: 1. 首先需要在使用到的 j ...

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

    如何实现上拉加载,下拉刷新? 一.前言 二.实现原理 上拉加载 下拉刷新 三.案例 小结 一.前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页,只是交互形式不同 ...

  5. 如何实现上拉加载和下拉刷新

    下拉刷新和上拉加载这两种交互⽅式通常出现在移动端中 本质上等同于PC⽹⻚中的分⻚,只是交互形式不同 开源社区也有很多优秀的解决⽅案,如 iscroll . better-scroll . pullto ...

  6. 面试官:JavaScript如何实现上拉加载,下拉刷新?

    一.前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页,只是交互形式不同 开源社区也有很多优秀的解决方案,如iscroll.better-scroll.pullto ...

  7. html5上拉下拉刷新,APP 上拉加载,下拉刷新 介绍

    开发APP时,很多时候都会用上,上拉加载数据,下拉刷新等功能,本文件介绍两种. 一种是原生APP自带的上拉加载,下拉刷新功能,一种是用JS 插件写的上拉加载,下拉刷新. 1.原生APP 的 上拉加载, ...

  8. 小程序上拉加载,下拉刷新

    小程序上拉加载,下拉刷新 data: {collectinformation: null,number: 1,size: 10,isOpenLoading: true,isEmpty: true,is ...

  9. tableview插入刷新_iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码...

    废话不多说了,直接给大家贴代码了. 具体代码如下所示: #import "ViewController.h" #import "TuanGouModel.h" ...

最新文章

  1. 当adobe flash player不能安装时
  2. c 子类对象 访问父类对象受保护成员_java面向对象总结
  3. (77)FPGA时序违例及解决办法-面试必问(一)(第16天)
  4. nginx作用_nginx作用及其配置
  5. floating输入 高阻输入_STM32 GPIO八种输入输出模式
  6. Cocos2d-x Touch事件处理机制(better)
  7. Bootstrap 3.0正式版发布!
  8. 在netbeans中使用tomcat服务器的web应用,在NetBeans中创建Apache—Tomcat-web服务器
  9. java excel 2007兼容包_Microsoft Office 2007兼容包
  10. Linux下通过ssh上传、下载文件或者文件夹
  11. hlw8012电能测量芯片(多组功率电流测量)
  12. STC8H开发(十四): I2C驱动RX8025T高精度实时时钟芯片
  13. 组织结构流程图模板分享
  14. 纯MSDOS操作系统下的计算机重启与关机
  15. AutoCAD2013安装说明
  16. VB中的“msgbox”函数各参数详解
  17. 阿里云安全中心之漏洞修复最佳实践
  18. STM32--ADC
  19. 利用python自动在火狐浏览器上输入账号密码
  20. /lib//libclntsh.so: file format not recognized; treating as linker script

热门文章

  1. Java for Selenium | Java中的变量variable、常量constant、字面量Literal
  2. 一些想说的话,无关技术
  3. 使用jmeter自动生成测试报告
  4. linux脚本执行命令登录,Linux登录后自动执行脚本,系统基础信息一目了然
  5. 虚拟机克隆+虚拟机网络问题排查
  6. 支付宝扫码答奥数 5分钟做出来可免单
  7. python数据分析与展示--Pandas库入门
  8. 实验二第1关:谁是小偷?
  9. spring boot 前后端分离项目(商城项目)学习笔记
  10. 饥荒联机版服务器搭建_TGP饥荒联机版专用服务器怎么搭建?专用服务器搭建方法...