微信小程序上滑加载下拉刷新(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 相关文章推荐
js弹窗代码 可以指定弹出间隔
Jul 03 Javascript
jQeury淡入淡出需要注意的问题
Sep 08 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
Jan 02 Javascript
JavaScript实现Java中StringBuffer的方法
Feb 09 Javascript
js实现图片上传并正常显示
Dec 19 Javascript
bootstrap学习笔记之初识bootstrap
Jun 21 Javascript
jQuery实现产品对比功能附源码下载
Aug 09 Javascript
基于JavaScript实现瀑布流效果
Mar 29 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 Javascript
vue实现简单的日历效果
Sep 24 Javascript
vue实现多级菜单效果
Oct 19 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
Feb 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函数和特点
2013/08/08 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
微信小程序canvas实现签名功能
2021/01/19 Javascript
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
Python计算程序运行时间的方法
2014/12/13 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
python表格存取的方法
2018/03/07 Python
浅析Python函数式编程
2018/10/06 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
解决python运行启动报错问题
2020/06/01 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
黄河的主人教学反思
2014/02/07 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
Python函数中apply、map、applymap的区别
2021/11/27 Python
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python