触底加载效果

实现思路

触底加载更多的细节:

  1. 触底: 监测触底事件在触底之后执行一系列动作
  2. 加载数据: 在触底后需要向服务器请求数据,如果已经请求到了所有数据,应该不再发送请求。
  3. 加载状态: 请求数据的等待时间,需要更新状态为加载中,数据渲染完成后取消该状态的显示
  4. 数据渲染: 将请求到的数据显示在视图中
  5. 没有更多数据的提示

功能实现

1、数据结构

数据格式来源[风袖API文档](https://course.talelin.com/lin/sleeve/3 API:Banner.html)

{"total":1,"count":10,"page":0,"total_page":1,"items":[{"id":8,"title":"ins复古翠绿NoteBook","subtitle":"林白默默的掏出小本本,将她说的话一次不漏的记了下来。","img":"","for_theme_img":"","price":"29.99","discount_price":"27.8","description":null,"tags":"林白推荐","sketch_spec_id":"1","max_purchase_quantity":null,"min_purchase_quantity":null}]
}

2、产品的业务逻辑

//model/product.js
class product{static goods=[{id: 'P001',image: '/image/图灵.jpg',title: '长款系带风衣',describe: '柔软顺滑、上身挺括显瘦。',price: '888',delPrice: '666'}, //只留一个做展示];constructor() {this.total=product.goods.length}async getProductList({count=5,page=1}){this.count=count;this.page=page;this.total_page=Math.ceil(this.total/this.count);const start=(this.page-1)*this.count;const end=this.count*this.page;this.items=product.goods.slice(start,end);return new Promise(resolve => {resolve(this.getDataTemplate())})}getDataTemplate(){return{total:this.total,count:this.count,total_page:this.total_page,page:this.page,items:this.items}}
}
export {product
}

其中 getDataTemplate()对传入的数据进行格式上的封装,getProductList()方法则是实现分页的逻辑并将结果返回为一个Promise对象。

3、加载数据的确定

data: {loadingEnd: false,  // 是否loading完loading: false, // loading的状态products: [], // 展示的数据productModel: null, // Products类创建的对象模型currentPage: 1, // 当请求页的设置pageCount: 5, // 每页请求数据的数量}

4、初始第一页数据的加载

async onLoad(options) {const productModel = new product();const productList = await productModel.getProductList({count: this.data.count,page: this.data.currentPage});this.setData({productModel,products: productList});console.log(this.data.products);this.renderWaterFlow();},renderWaterFlow() {wx.lin.renderWaterFlow(this.data.products.items, false, () => {console.log('渲染成功')})},
  1. 进入页面在没有触发触底事件时,第一页的数据进行正常的显示。所以在onLoad生命周期中进行。
  2. 这里创建了product类的实例productModel方便后续向业务模型发送请求获取数据。紧接着调用该实例的getPorductList方法,并传入请求页与每页显示数据条数获取第一页的产品数据,并将其更新到data中,进行数据的接受。
  3. 最后调用lin-ui提供的瀑布流组件进行数据的渲染。

###5、触底加载更多数据

onReachBottom: function() {if (this.data.currentPage >= this.data.productModel.total_page) {this.setData({loadingEnd: true,loading: false,});} else {this.setData({loading: true,currentPage: this.data.currentPage + 1,});setTimeout(() => {this.getPageProductList()}, 2000)}},async getPageProductList() {const products = await this.data.productModel.getProductList({count: this.data.pageCount,page: this.data.currentPage});this.setData({products,});this.renderWaterFlow();},

onReachBottom是小程序提供的触底事件处理方法,我们可以将触底后需要做的操作放在此函数中运行。

首先判断了当前展示的数据是不是最后一页的数据:

  • 如果是的话就不再进行数据的请求,并将loading组件显示出来,loading状态设为false,loadingEnd设为true,进行没有更多数据提示的相关展示。
  • 如果当前展示的数据没有到最后一页,则应请求下一页数据,并将loading组件加载出来,loading状态为加载状态。这里使用setTimeout模拟了发送和接收请求这段等待的时间。

getPorductList方法里对(模拟的)后端进行了请求并做了数据设置,之后调用renderWaterFlow进行瀑布流的展示,在lin-ui瀑布流函数的回调中,同时也适用lin-ui提供的页底提示进行加载信息的提升。

注:使用组建实现页底提示可以使开发的过程变的高效和易用

6、组建的引用

{"usingComponents": {"l-demo": "/components/l-demo/index","water-flow": "/miniprogram_npm/lin-ui/water-flow/index","l-loadmore": "/miniprogram_npm/lin-ui/loadmore/index"}
}

lin-ui实现瀑布流的触底加载相关推荐

  1. 微信小程序04---头像上传、瀑布流、下拉刷新、触底加载更多、分包

    目录 一.头像上传 1.选择图片   wx.chooseImage() 2.上传文件   wx.uploadFile() 二.瀑布流+下拉刷新+触底加载 三.分包加载 什么是分包 为什么要使用分包 如 ...

  2. uni-app下拉刷新触底加载更多

    首先在pages.json 配置文件中配置    "enablePullDownRefresh": true  需要在哪用加载就配置在路由的style里 两个事件 //下拉刷新 o ...

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

    目录 一 简要介绍一下onreachBottom事件 二  实例展示 三 遇到的一些问题 一 简要介绍一下onreachBottom事件 onreachBottom和onLoad以及onShow一样, ...

  4. 列表如何做,看这一篇就够啦——触底加载、虚拟滚动与计算展现值

    我们作为前端,平时遇到的一大类工作就是展现各种的数据,而列表就是其中一个基础而通用的形式,无论是像Google.百度这样的搜索引擎,到像Facebook.Twitter.掘金这样的用户社区,抑或是像美 ...

  5. java页面展示流式图片,javascript瀑布流式图片懒加载实例解析与优化

    之前写过一版图片"懒加载"的文章,刚好周末在整理文件的时候,大概又看了一遍之前写的代码发现有很多可以优化的地方. 这篇文章主要就是结合上篇<javascript瀑布流式图片懒 ...

  6. vue-infinite-scroll 实现触底加载

    说明 如果项目中需要实现触底加载,可以使用vue-infinite-scroll来实现. 安装 通过下面的命令可以进行安装: npm install vue-infinite-scroll -S 配置 ...

  7. Vue 列表 懒加载 触底加载

    一.方法一 描述:列表懒加载+节流 效果图: 实现: 组件:LazyLoading <template><div class="lazy-list">< ...

  8. 小程序 下拉刷新 上拉触底加载数据

    1. 下拉刷新 下拉刷新主要用到「onPullDownRefresh」函数,我们在新建目录然后新建page之后在wxml文件中会自动生成很多生命周期函数,其中就会生成「onPullDownRefres ...

  9. uniapp触底加载

    文章目录 一.onReachBottom()函数 首先,在page.json的style下设置 然后在页面使用即可,与生命周期函数同一级别 二.在子组件中使用滚动区域scrow-view触底加载 1. ...

最新文章

  1. javascript断点调试方法
  2. 干货丨2017年AI与深度学习要点大全
  3. C语言函数大全(a开头)
  4. 重温强化学习之深度强化学习
  5. DHCP服务器的设计
  6. Python开发GUI工具介绍,实战:将图片转化为素描画!
  7. postgresql 增量备份
  8. Redis常用命令及命名规范
  9. 卷积神经网络 – CNN
  10. 《Fluid Engine Development》 学习笔记3-光滑粒子流体动力学
  11. [转]C++日志系统log4cxx使用总结
  12. 全网首发:JDK绘制文字:二、绘制句柄的初始化流程
  13. 创翼linux版本,创翼电信客户端for Mac-创翼客户端Mac版下载 V1.3.7-PC6苹果网
  14. 百度翻译API错误码大全(建议收藏)
  15. 静态HTML网页设计作品:旅游网站设计——开心旅游网(15页) HTML+CSS+JavaScript 主题度假酒店
  16. python数列求和_python练习--数列求和
  17. 单例模式,异常和模块相关
  18. md5在线加密解密是不是什么都能解密?为什么我的没有解出来呢?
  19. 微服架构基础设施环境平台搭建 -(二)Docker私有仓库Harbor服务搭建
  20. android 股票 开发,Android版的股票行情K线图开发

热门文章

  1. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java网上点餐系统g582p
  2. Netty4.x用POJO代替ByteBuf案例
  3. php将敏感词替换为*的方法
  4. 会计准则中计算机软件费用摊销,财务软件累计摊销完的账务处理
  5. 【信息安全案例】——软件解密技术(以OllyDbg为例)
  6. 和 Google Play 一起打开日本市场 | ChinaJoy 干货分享
  7. 3.6 n维随机变量
  8. 京东一小伙一年输出20篇专利,其实你也可以
  9. 【题解】 P1594 护卫队
  10. 图解USB 3.0标准