lin-ui实现瀑布流的触底加载
触底加载效果
实现思路
触底加载更多的细节:
- 触底: 监测触底事件在触底之后执行一系列动作
- 加载数据: 在触底后需要向服务器请求数据,如果已经请求到了所有数据,应该不再发送请求。
- 加载状态: 请求数据的等待时间,需要更新状态为加载中,数据渲染完成后取消该状态的显示
- 数据渲染: 将请求到的数据显示在视图中
- 没有更多数据的提示
功能实现
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('渲染成功')})},
- 进入页面在没有触发触底事件时,第一页的数据进行正常的显示。所以在
onLoad
生命周期中进行。 - 这里创建了
product
类的实例productModel
方便后续向业务模型发送请求获取数据。紧接着调用该实例的getPorductList
方法,并传入请求页与每页显示数据条数获取第一页的产品数据,并将其更新到data中,进行数据的接受。 - 最后调用
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实现瀑布流的触底加载相关推荐
- 微信小程序04---头像上传、瀑布流、下拉刷新、触底加载更多、分包
目录 一.头像上传 1.选择图片 wx.chooseImage() 2.上传文件 wx.uploadFile() 二.瀑布流+下拉刷新+触底加载 三.分包加载 什么是分包 为什么要使用分包 如 ...
- uni-app下拉刷新触底加载更多
首先在pages.json 配置文件中配置 "enablePullDownRefresh": true 需要在哪用加载就配置在路由的style里 两个事件 //下拉刷新 o ...
- 微信小程序开发使用onreachBottom实现页面触底加载及分页
目录 一 简要介绍一下onreachBottom事件 二 实例展示 三 遇到的一些问题 一 简要介绍一下onreachBottom事件 onreachBottom和onLoad以及onShow一样, ...
- 列表如何做,看这一篇就够啦——触底加载、虚拟滚动与计算展现值
我们作为前端,平时遇到的一大类工作就是展现各种的数据,而列表就是其中一个基础而通用的形式,无论是像Google.百度这样的搜索引擎,到像Facebook.Twitter.掘金这样的用户社区,抑或是像美 ...
- java页面展示流式图片,javascript瀑布流式图片懒加载实例解析与优化
之前写过一版图片"懒加载"的文章,刚好周末在整理文件的时候,大概又看了一遍之前写的代码发现有很多可以优化的地方. 这篇文章主要就是结合上篇<javascript瀑布流式图片懒 ...
- vue-infinite-scroll 实现触底加载
说明 如果项目中需要实现触底加载,可以使用vue-infinite-scroll来实现. 安装 通过下面的命令可以进行安装: npm install vue-infinite-scroll -S 配置 ...
- Vue 列表 懒加载 触底加载
一.方法一 描述:列表懒加载+节流 效果图: 实现: 组件:LazyLoading <template><div class="lazy-list">< ...
- 小程序 下拉刷新 上拉触底加载数据
1. 下拉刷新 下拉刷新主要用到「onPullDownRefresh」函数,我们在新建目录然后新建page之后在wxml文件中会自动生成很多生命周期函数,其中就会生成「onPullDownRefres ...
- uniapp触底加载
文章目录 一.onReachBottom()函数 首先,在page.json的style下设置 然后在页面使用即可,与生命周期函数同一级别 二.在子组件中使用滚动区域scrow-view触底加载 1. ...
最新文章
- Java 线程池之FixedThreadPool(Java代码实战-003)
- centos7安装git_【DevOps】centos7 下的 gitlab托管服务器的介绍与安装
- MySQL性能优化步骤
- 使用Java第2部分查询DynamoDB项
- mysql主键重复会覆盖还是_mysql如果主键重复了会发生什么情况
- oracle 执行sql,Oracle动态执行SQL
- maven上传jar到私服
- 【java学习之路】(数据结构篇)003.链表
- jdk13不能显示中文_JDK 13都发布了!你还在用JDK7吗?
- PDF文档转换成mobi格式(for kindle),并解决排版问题
- Firefox必备的24款web开发插件
- 原生js 实现小人吃豆豆小游戏
- pdf转换成jpg python_Python 将pdf转成图片
- 【WSL2】ubuntu22.04 安装docker
- 第十二周《支持SQl Server内部,第二版》CHAR1数据页面和数据行 作者Dmitri Korotkevitch
- PHP云招聘系统H5(源码+数据库脚本)
- 如何在cad中导入谷歌地图_如何在Google地图中避开收费公路
- windows系统原版下载
- 访格兰特总统之墓与小男孩之墓
- 2018伦敦市长交通战略
热门文章
- JavaSE-java.io.File类
- 计蒜客 Python练习
- warning LNK4075: 忽略”/EDITANDCONTINUE”(由于”/INCREMENTAL:NO”规范)
- 项目经理对项目各阶段需求的把控力度
- ERPGo v3.3 – 一体式企业ERP系统-PHP免授权源码
- 设计一个智能传感器只需要4步
- 联想G50 进入BIOS的快捷键
- ASP.NET Core 5 如何创建区域(Areas)
- 星辰大海-激荡三十年
- gdal java api 中文_GDAL API入门