原生js实现下拉刷新和上拉加载更多

yizhihongxing

标题:原生 JavaScript 实现下拉刷新和上拉加载更多

要实现下拉刷新和上拉加载更多功能,遵循以下步骤:

  1. 监听 touchstarttouchmovetouchend 事件,记录下起始位置和滑动距离
  2. touchend 事件中,当滑动距离超过一定距离时,在页面顶部或底部添加加载中的提示条,并触发请求加载数据的函数
  3. 在数据加载完成后,调用相应的函数更新列表
  4. 当用户手指在下拉或上拉时,显示提示文本,当拖动距离不足时隐藏提示文本

下面是具体实现

实现下拉刷新

let startY, moveY, diffY // 记录滑动距离
let pullRefresh = document.querySelector('.pull-refresh') // 下拉刷新提示
let pullRefreshText = pullRefresh.querySelector('.pull-refresh-text') // 下拉刷新提示文本
let pullRefreshIcon = pullRefresh.querySelector('.pull-refresh-icon') // 下拉刷新图标

document.addEventListener('touchstart', function (e) {
  startY = e.touches[0].pageY
})

document.addEventListener('touchmove', function (e) {
  moveY = e.touches[0].pageY
  diffY = moveY - startY

  // 当用户下拉时,显示提示文本
  if (diffY > 0) {
    pullRefreshText.style.display = 'block'
    pullRefreshIcon.style.display = 'none'
    pullRefresh.style.height = diffY / 2 + 'px'
  } else {
    pullRefreshText.style.display = 'none'
  }
})

document.addEventListener('touchend', function (e) {
  // 当用户下拉并松手时,触发下拉刷新
  if (diffY > 80) {
    pullRefreshText.innerText = '正在刷新...'
    pullRefreshIcon.style.display = 'inline-block'
    pullRefresh.style.height = '50px'

    setTimeout(function () {
      // 模拟数据加载
      let data = ['新数据1', '新数据2', '新数据3']
      updateList(data)
      resetPullRefresh()
    }, 1500)
  } else {
    resetPullRefresh()
  }
})

// 重置下拉刷新提示
function resetPullRefresh () {
  pullRefreshText.innerText = '下拉可以刷新'
  pullRefreshIcon.style.display = 'inline-block'
  pullRefresh.style.height = '0px'
}

在该示例中,pull-refresh-textpull-refresh-iconpull-refresh 分别是提示文本、刷新图标和提示条的 DOM 元素, updateList 函数用来更新列表,resetPullRefresh 函数用于重置提示条的样式。

实现上拉加载更多

let loadingMore = false // 记录是否正在加载更多
let loadMore = document.querySelector('.load-more') // 上拉加载提示

window.addEventListener('scroll', function () {
  let scrollHeight = document.documentElement.scrollHeight // 获取页面总高度
  let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop // 获取滚动条滚动的距离
  let clientHeight = document.documentElement.clientHeight // 获取当前可视区域高度

  // 当用户滚动到页面底部时,显示提示文本并触发加载更多数据
  if (scrollTop + clientHeight >= scrollHeight && !loadingMore) {
    loadingMore = true
    loadMore.innerText = '加载中...'

    setTimeout(function () {
      // 模拟数据加载
      let data = ['更多数据1', '更多数据2', '更多数据3']
      updateList(data)
      loadingMore = false
      loadMore.innerText = '上拉加载更多'
    }, 1500)
  }
})

在该示例中, loadingMore 记录当前是否正在加载,load-more 是提示条的 DOM 元素。

以上就是原生 JavaScript 实现下拉刷新和上拉加载更多的示例代码,其中模拟数据加载部分需根据实际情况进行替换。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现下拉刷新和上拉加载更多 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Python 中enum的使用方法总结

    Python 中enum的使用方法总结 1. 引言 在Python中,enum是一个非常有用的模块,它允许我们定义一组具有特定值的常量。使用enum可以提高代码的可读性和可维护性。本文将详细介绍enum的使用方法,并提供两个示例说明。 2. 定义枚举 要使用enum,首先需要导入Enum类。然后,可以通过继承Enum类来定义自己的枚举类型。下面是一个示例: …

    other 2023年8月18日
    00
  • Android Fragment 基本了解(图文介绍)

    Android Fragment 基本了解(图文介绍) 什么是 Fragment? Fragment 是一种 UI 组件,可以像 Activity 一样具有用户界面,并且可以在 Activity 中组合使用多个 Fragment 以构建复杂的用户界面。 Fragment 的使用场景 Fragment 的使用场景主要涉及以下几种情况: 在大屏幕设备(比如平板电…

    other 2023年6月27日
    00
  • Office2016中excel/ppt右键菜单闪退该怎么办?

    针对“Office2016中excel/ppt右键菜单闪退该怎么办?”的问题,以下是解决该问题的完整攻略: 1. 清除Office缓存文件 第一种方法是清除Office缓存文件,这对于修复大多数Office问题都有效。 执行以下步骤: 关闭所有Office程序,包括Excel、PPT等程序。 打开“文件资源管理器”并输入以下路径:%localappdata%…

    other 2023年6月27日
    00
  • Windows server 2012 NTP时间同步的实现

    Windows Server 2012 NTP时间同步的实现 什么是NTP? 网络时间协议(Network Time Protocol,缩写NTP),是用于使计算机在互联网中同步时间的协议。 在计算机网络中,为了保证网络的安全和正确的运行,重要的是每台计算机都拥有正确的时间,而NTP就是一种用来同步计算机时间的协议。 NTP以客户端/服务器模式运作,客户端通…

    other 2023年6月27日
    00
  • 用bat文件修改ip

    用bat文件修改IP的攻略 1. 创建bat文件 首先,我们需要创建一个bat文件来执行IP修改的操作。可以使用任何文本编辑器,如记事本,创建一个新的文本文件,并将其保存为.bat文件格式。 2. 编写bat文件内容 在bat文件中,我们将使用一些命令来修改IP地址。以下是两个示例说明: 示例1:静态IP地址设置 如果你想要将IP地址设置为静态IP,可以使用…

    other 2023年7月31日
    00
  • Vue elementUI表单嵌套表格并对每行进行校验详解

    Vue ElementUI表单嵌套表格并对每行进行校验详解 在Vue和ElementUI的组合中,我们可以使用表单嵌套表格的方式来实现复杂的数据录入和校验功能。本攻略将详细介绍如何实现这一功能,并提供两个示例说明。 步骤一:安装和引入依赖 首先,确保你已经安装了Vue和ElementUI。如果没有安装,可以通过以下命令进行安装: npm install vu…

    other 2023年7月28日
    00
  • Python面向对象原理与基础语法详解

    Python面向对象原理与基础语法详解 1. 引言 面向对象编程(Object-Oriented Programming,OOP)是一种常用的程序设计思想,Python作为一门面向对象编程语言,也提供了丰富的面向对象的特性和语法。本文将详细讲解Python中的面向对象原理和基础语法,帮助读者理解和运用面向对象编程的概念和技巧。 2. 面向对象原理 面向对象编…

    other 2023年6月28日
    00
  • 图片按钮(imagebutton)

    图片按钮(imagebutton) 图片按钮(ImageButton)是一种常见的界面元素,通常用于代替传统的文本按钮。对于需要展示图标、logo 或照片等有意义的图片的应用,图片按钮是一个非常棒的选择。 如何创建一个图片按钮 在 HTML 中,我们可以使用 <button> 标签来创建一个文本按钮。但是,如果我们想创建一个图片按钮,则需要将 t…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部