微信小程序开发使用onreachBottom实现页面触底加载及分页

news2025/1/24 11:43:01

目录

一 简要介绍一下onreachBottom事件

 二  实例展示

 三 遇到的一些问题


一 简要介绍一下onreachBottom事件

        onreachBottom和onLoad以及onShow一样,都属于小程序的生命周期事件,作用就是在页面下拉到底部时触发这个事件,一般适用于数据比较多的情况下,实现懒加载并分页展示数据。

        截图中展示了小程序对onreachBottom事件的具体解释和参数。

 二  实例展示

此次展示的实例是在小程序首页加载二手车车源信息的下拉分页加载数据的效果。

  1. 首先需要在data里面初始化分页的页数和获取的数据数组。

  2. 写好触底之后加载新数据并保留老数据的方法。我把加载第一页数据和触底加载新数据写在了一个方法里面,方法里面加入了一个布尔型的reachBottom参数,在onLoad事件里参数为false,只加载第一页;在onreachBottom事件里参数为true,要加载新的数据.
  3. 向后端请求的方法为util.request,详情可以看我上一个博客,贴个链接.这里的参数比较多,贴图

    https://blog.csdn.net/weixin_53387347/article/details/125742037?spm=1001.2014.3001.5502
  4. 将从后端请求的数据保存在supplyList中,并且通过setData方法写入data中的supplyList中,将总页数也保存在totalPages中,最后每获取一整页的数据之后将页数加一,为下页调用数据做准备.方法的整体代码如下.
    getSupplyList(reachBottom) {//参数表示是否为触底下拉加载数据
        wx.showLoading({
          title: '加载中...',
        });
        let that = this;//在回调甘薯里,this有时候不能直接用,防止出bug所初始化一个that
        util.request(api.SupplyList, {//发送请求
          type: that.data.type,
          page: that.data.page,
          limit: that.data.limit,
          searchValue: that.data.searchValue//请求的四个参数
        }).then(function (res) {
          console.log(that.data.page);
          if (res.errno === 0) {//为0请求成功
            let supplyList = res.data.list.map(item => {
              item.dueTime = util.formatTime2(new Date(item.dueTime), "Y/M/D");//设置日期格式
              item.herbListImage && (item.herbListImage01 = item.herbListImage.split(',')[0])//设置获取的图片列表
              item.companyLogo = item.companyLogo || item.avatar;
              item.companyName = item.companyName || item.nickname;
              return item;//将这一条数据返回supplyList并保存
            });
            //触底加载新数据并保留老数据
            if (reachBottom) {
              supplyList = [...that.data.supplyList, ...supplyList]//将新数据加入老数据中
            }
            that.setData({//将获取的值赋值给data中的数组和总页数
              supplyList: supplyList,
              totalPages: res.data.pages
            });
            that.data.page++//所有操作完成后页数加一
            wx.hideLoading();
          }
        }).finally(() => {
          wx.hideLoading();
        });
      },
  5. 写好getSupplyList方法之后,可以在onReachBottom触底加载事件里面进行调用,调用的时候要判断当前页是否小于总页数,小于的话进行调用,并且在每次调用后将当前页数加一,代码如下.
      onReachBottom() {//触底加载事件
        if (this.data.totalPages > this.data.page) {//判断当前也是否小于总页数
          this.setData({
            page: this.data.page + 1//当前页加一
          });
        } else {
          return false;
        }
        this.getSupplyList(true);//调用方法
      },

    这样这个触底加载的功能就已经实现了. 如图

     三 遇到的一些问题

在实际开发这个过程当中,也遇到了一些问题,可以和大家分享一下,互相学习

        在测试的时候,第一次分页加载实现了,后面都没有实现,在排查之后,发现经过第一次的分页之后this.data.page即当前页面变为了3,在刷新页面之后并没有重新初始化为1,所以要在页面每次关闭之后将页面重新赋值为1,如图.

        在写getSupplyList方法时,在data里面定义好的变量使用的时候总是显示 undefined 未定义,在csdn上查到了原因,是因为在js的一些函数或者回调函数中,直接用this可能是无法访问的,需要重新定义一个变量代替this,解决方法如下,用that代替this来使用data中的变量.

         如果要实现想动图里面那样的无感触底加载的功能,只需要在对应的json文件里面加入"onReachBottomDistance": 300,可以在离底部300的时候就开始执行触底加载事件.

欢迎大家一起讨论.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/407940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一次跨域的坑Faild to load response data: No resourse with given identifier found

有一个导出接口,前后端都没有动过,之前也测试过没有问题。上到测试环境后,测试环境加了证书,报错了。 先是后端小朋友和我说了这个问题: 浏览器控制台打印信息(聊天记录中那张图):然后我问他操作了哪个页面…

vue3.0教程——搭建Vue脚手架【简化版】

目录 哈喽,大家好丫,你们的小郭子又来啦 ~ 一、环境要求 (1)node安装(前端开发环境) (2)vue-cli脚手架安装 二、安装依赖 (1)使用命令行安装以下依赖 &a…

Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理

Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理 目录 Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理 一、简单介绍 二、安装和使用 三、效果图 四、vue-seamless-scroll 点击事件…

(网页开发/前端)配置VsCode,让您拥有更舒适的开发环境

vscode,微软旗下的一款强大的IDE集成开发环境,现在,越来越多的网页开发人员选择使用vscode来敲代码。 但是,在不添加任何扩展的vscode中,想要享受“丝滑”的开发体验是比较困难的。所以,接下来,…

js从地址栏获取参数

一、过程分四步: 1.获取地址栏; var loclocation.href; 2.获取地址栏的长度 var n1loc.length; 3.获取地址栏中第一个等号的位置; var n2loc.indexOf(); 4.以等号位置,截取后面的内容; var strloc.slice(n2…

Object.entries()

Object.entries() 方法返回一个给定对象自身可枚举属性的键值对数组。 其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环还会枚举原型链中的属性)。 语法 Object.entries(obj) 参数 obj:可以返回其可枚举属性…

VS2022(Visual Studio)发布ASP.NET Core Web API应用到Web服务器(IIS)

概述 写完代码后,最常用、简单的发布方式,就是将应用发布到文件夹,然后将publish文件夹复制到要部署的机器上(本地、局域网服务器、云服务器等)。 但是在实际工作中,可能会遇到需要频繁地发布&#xff0c…

vue--后台管理系统问题和功能实现思路集锦

目录 一、动态菜单 1、问题:点击菜单,其他菜单都会打开,且选中某个菜单,其他菜单都会选中 2、问题:home页面代码内动态菜单数据获取的位置 二、动态路由 1、问题:刷新home页面后,页面报错&…

微信小程序开发(遇到的报错和注释)

一开始验证文章出错了,一直运行不起来,取消设置,可以正常调用。 页面小程序窗口组件部分:navigationbar导航栏区域,background背景区域(默认不可见,下拉才显示)、页面的主题区域&am…

教你一文解决 js 数字精度丢失问题

文章目录一、关于为什么要解决精度丢失二、怎么解决js的计算精度丢失问题?三、toPrecision 特定方法返回四舍五入长度字符串结语一、关于为什么要解决精度丢失 可以看下例子,因为js失去精度问题也是常见的问题,正常我们可以四舍五入或者 toF…

vue3中使用ant-design-vue的layout组件实现动态导航栏功能(1~2级)

目录 0 前言 1 准备工作 1.1 安装ant-design-vue 1.2 安装图标组件包 2 选择组件 3 路由文件 4 Vue导航页面 5 最终效果 0 前言 最近在自己搞一个前后端小项目,前端想使用ant-design-vue的layout组件实现动态导航栏和面包屑,但是网上的资料较少&…

新星微前端MicroApp的基础教程

目录 什么是微前端? 使用场景 microApp介绍 概念图 micorApp的优势 microApp项目的应用 基座 基座路由 子应用 react项目中路由位置进行使用 跨域的问题 react项目中跨域 vue项目中跨域 micorApp基础介绍 micorApp传值(重要) …

Vue 2项目如何升级到Vue 3?

应不应该从 Vue 2 升级到 Vue 3 应不应该升级?这个问题不能一概而论。 首先,如果你要开启一个新项目,那直接使用 Vue 3 是最佳选择。后面课程里,我也会带你使用 Vue 3 的新特性和新语法开发一个项目。 以前我独立使用 Vue 2 开…

【vue】vuex常见面试题

【vue】vuex常见面试题 文章目录【vue】vuex常见面试题一、vuex简介对vuex的理解各模块在流程中的功能:Vuex实例应用二、常见面试题1.Vuex 为什么要分模块并且加命名空间2.Vuex和单纯的全局对象有什么区别?3.为什么 Vuex 的 mutation 中不能做异步操作&a…

css宽高自适应

1. 宽高自适应 举个例子看看什么是宽高自适应, (1)先正常创建一个div标签,有宽和高: 结果: (2)去掉div的宽度,观察结果 结果: 结果占满了整个屏幕&#xff0…

HTML表格样式

9675人阅读 行跟列背景颜色的选择&#xff0c;合并等 列的颜色选择代码 <colgroup span"1" bgcolor"lightgreen"></colgroup> <colgroup span"1" bgcolor"lightyellow"></colgroup> <colgroup span"…

一大波 ChatGPT 开源项目,诞生了!

公众号关注 “GitHubDaily”设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01;大家好&#xff0c;我是小 G。本月初 ChatGPT 问世&#xff0c;犹如平地惊雷般&#xff0c;在技术圈中引起了广泛讨论。作为全球最大的开发者社区&#xff0c;GitHub 平台也在近期诞生了多个…

Ant vue中表单验证(动态校验、部分校验)

前提&#xff1a;写了超级复杂的表单&#xff0c;其中涉及了很多表单验证的地方&#xff0c;现一一记录一下&#xff1b; ant-vue 版本1.7.8 vue 版本2.6.11 校验的原理大体相似&#xff0c;灵活应用&#xff01;&#xff01; 1.动态校验 需求&#xff1a; 1根据读写方式去动态…

Css display 属性详解

css display - 块和内联元素 块级元素(block)块元素是一个元素&#xff0c;占用了全部宽度&#xff0c;在前后都是换行符;总是独占一行&#xff0c;表现为另起一行开始&#xff0c;而且其后的元素也必须另起一行显示内联元素(inline)内联元素只需要必要的宽度&#xff0c;不强…

react简单入门--常用hook中useMemo的使用(详细版)

前言&#xff1a; 作用&#xff1a; 首先useMemo它使用来做缓存用的&#xff0c;只有当一个依赖项改变的时候才会发生变化&#xff0c;否则拿缓存的值&#xff0c;就不用在每次渲染的时候再做计算 场景&#xff1a; 既然是用作缓存来用&#xff0c;那场景就可能有&#xff1a…