微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)


Posted in Javascript onMay 11, 2017

微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)

页面缓存的设置优化了页面加载,减少了频繁的调取接口,使用户在断网的情况下有更好的体验。

每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage(wx.setStorageSync)、wx.getStorage(wx.getStorageSync)、wx.clearStorage(wx.clearStorageSync)可以对本地缓存进行设置、获取和清理。本地缓存最大为10MB。

注意: localStorage 是永久存储的,但是我们不建议将关键信息全部存在 localStorage,以防用户换设备的情况。

项目需求

通过使用scroll-view 自定义的鼠标滚动事件onscrollLower,监听页面下拉事件

page.init()的方法里封装了请求数据的接口,后台api文档自带分页pageSize,默认值为10,-1为请求全部数据。

说明:

触发下滑事件通过与页面data缓存数据对比,去请求接口。

代码实现

var n=0
 page.init = function(callback) {
 page.data.loading = true;
 n+=10;
 cardService.listFavoriteCards(n,function(result){
 var cards = result.data.favoriteCards; 
 var starCards = result.data.starCards;

 starCards.sort(function(c1,c2){
 var c1Name = pinyingUtil.getInitials.convertPinyin(c1.name);
 var c2Name = pinyingUtil.getInitials.convertPinyin(c2.name);

 return c1Name > c2Name ? 1 : -1;
 });

 if(starCards && starCards.length> 0) {
 starCards.forEach(function(c){
 var compressEntName = dictService.compressEntName(c.companyName);
 c.compressEntName = compressEntName;
 });
 }

 page.setData({
 "favoriteCards" : cards,
 "starCards" : starCards,
 "filterType" : "name",
 "groups" : cardService.groupCardsByNameFirstLetter(cards),
 "loadding":false
 });
 wx.setStorageSync("setgroups",page.data.groups)
 });
 };

}
onLoad: function (options) {

 var geigroups=wx.getStorageSync('setgroups')
 var result =[]
 for(var i=0; i<geigroups.length; i+=5){
 result.push(geigroups.slice(i,i+5));
 }
 var resultd=result[0]
 if(geigroups){ 
 page.setData({
 "groups" : resultd
 }); 
 console.log('缓存')
 }else{
 if (wx.getStorageSync("token")) {
 page.init();
 page.initProfile();
 } else {
 App.addListener("evt_login", function () {
 page.init();
 page.initProfile();
 });
 }
 console.log('正常')
 }
}
onscrollLower:function(){
 var page = this;
 var geigroups=wx.getStorageSync('setgroups') //第一步拿数据
 var result =[] //定义空数组
 var n=0; //定义index
 for(var i=0; i<geigroups.length; i+=10){
 result.push(geigroups.slice(i,i+10));
 } //把数据每10个一组push到 result里面
 n+=1;

 var q=this.data.groups.length;
 if(geigroups){ //如果有缓存
 if(geigroups.length<=q) //如果当前data的数据少于缓存执行以下命令
 if (wx.getStorageSync("token")) { //如果有token请求数据
 page.init();
 page.initProfile();
 } else {
 App.addListener("evt_login", function () { //监听用户登陆以后 请求数据
 page.init();
 page.initProfile();
 });
 }

 }else{
 page.setData({
 "groups" : result[n], 
 }); 
 }
 },

总结

加载数据的几种方法:

方法一:onPullDownRefresh和onReachBottom方法实现小程序下拉加载和上拉刷新

方法二:在scroll-view里设定bindscrolltoupper和bindscrolltolower实现微信小程序下拉

因项目需求采用方法二去实现,结合本地储存是这次的难点,希望对大家有帮助,有不足的地方大家多提建议,共勉。

 相关文章:微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
JavaScript库 开发规则
Jan 31 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
Apr 08 Javascript
jQuery实现为图片添加镜头放大效果的方法
Jun 25 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
Jul 14 Javascript
什么是JavaScript注入攻击?
Sep 14 Javascript
简易的JS计算器实现代码
Oct 18 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
Jan 15 Javascript
vue bootstrap小例子一枚
Jun 09 Javascript
web前端vue filter 过滤器
Jan 12 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
Feb 10 Javascript
js实现简单掷骰子效果
Oct 24 Javascript
JS合并两个数组的3种方法详解
Oct 24 Javascript
JS实现的四级密码强度检测功能示例
May 11 #Javascript
详解Vue中状态管理Vuex
May 11 #Javascript
JS简单生成随机数(随机密码)的方法
May 11 #Javascript
ionic实现下拉刷新载入数据功能
May 11 #Javascript
vue2的todolist入门小项目的详细解析
May 11 #Javascript
ionic实现底部分享功能
May 11 #Javascript
学习使用Bootstrap栅格系统
May 11 #Javascript
You might like
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
python字符串的常用操作方法小结
2016/05/21 Python
python如何实现反向迭代
2018/03/20 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
Python重新加载模块的实现方法
2018/10/16 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
2019/07/11 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
2014端午节活动策划方案
2014/01/27 职场文书
制作部班长职位说明书
2014/02/26 职场文书
主题实践活动总结
2014/05/08 职场文书
党员先进事迹材料
2014/12/19 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
Python必备技巧之函数的使用详解
2022/04/04 Python
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android