微信小程序上滑加载下拉刷新(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小功能(列表页面隔行变色)简单实现
Nov 28 Javascript
JavaScript 模块化编程(笔记)
Apr 08 Javascript
javascript常用的方法分享
Jul 01 Javascript
浅谈JavaScript中指针和地址
Jul 26 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
Dec 13 Javascript
Angularjs中数据绑定的实例详解
Aug 25 Javascript
react 父组件与子组件之间的值传递的方法
Sep 14 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
Angular刷新当前页面的实现方法
Nov 21 Javascript
JS实现求5的阶乘示例
Jan 21 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
Sep 21 Javascript
vue动态绑定style样式
Apr 20 Vue.js
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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
thinkphp5引入公共部分header、footer的方法详解
2018/09/14 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
js数组操作常用方法
2014/05/08 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
整理Javascript基础入门学习笔记
2015/11/29 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
canvas使用注意点总结
2013/07/19 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
护理专业自我评价
2015/03/11 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记