详解微信小程序开发之下拉刷新 上拉加载


Posted in Javascript onNovember 24, 2016

微信小程序中的下拉刷新,上拉加载的功能很常见,目前我知道的有两种可行的方法,一是scroll-view,二是整个页面刷新.今天说说第一种,自己造轮子,难免有些瑕疵,日后慢慢完善.

上gif:详解微信小程序开发之下拉刷新 上拉加载
原理: scroll-view中有监听滑动的方法,这个跟Android类似.其中用到了滑动到顶部,滑动到底部的方法.

1.下拉刷新,在滑动到顶部时,bindscrolltoupper被调用,根据自己的业务逻辑请求即可.我的demo只是随机换了个关键字.

2.上拉加载,在滑动到底部时,bindscrolltolower被调用,我这里是页数加一,根据自己的业务逻辑修改,然后将获取到的集合添加到scroll-view的数据集合里即可.详解微信小程序开发之下拉刷新 上拉加载

上代码:

1.index.js

//index.js 
//获取应用实例 
var app = getApp() 
Page({ 
 data: { 
 words: [], 
 windowHeight: 0,//获取屏幕高度 
 refreshHeight: 0,//获取高度 
 refreshing: false,//是否在刷新中 
 refreshAnimation: {}, //加载更多旋转动画数据 
 clientY: 0,//触摸时Y轴坐标 
 }, 
 onLoad: function () { 
 var _this = this; 
 //获取屏幕高度 
 wxgetSystemInfo({ 
  success: function (res) { 
  _thissetData({ 
   windowHeight: reswindowHeight 
  }) 
  consolelog("屏幕高度: " + reswindowHeight) 
  } 
 }) 
 //获取words 
 wxrequest({ 
  url: 'http://apiavatardatacn/ChengYu/Search?key=77f072d28eb141c8b6dda145ca364b92&keyWord=好', 
  complete: function (res) { 
  if (resdatareason == 'Succes') { 
   _thissetData({ 
   words: resdataresult 
   }) 
  } 
  } 
 }) 
 }, 
 scroll: function () { 
 consolelog("滑动了") 
 }, 
 lower: function () { 
 var start = 0; 
 start += 1; 
 consolelog("加载了") 
 var _this = this; 
 wxrequest({ 
  url: 'http://apiavatardatacn/ChengYu/Search', 
  data: { 
  key: '77f072d28eb141c8b6dda145ca364b92', keyWord: '好', page: start 
  }, 
  complete: function (res) { 
  if (resdatareason == 'Succes') { 
   var words = _thisdatawordsconcat(resdataresult); 
   _thissetData({ 
   words: words 
   }) 
  } 
  } 
 }) 
 }, 
 upper: function () { 
 consolelog("下拉了") 
 //获取用户Y轴下拉的位移 
 
 if (thisdatarefreshing) return; 
 thissetData({ refreshing: true }); 
 updateRefreshIconcall(this); 
 var _this = this; 
 var i = Mathrandom() //获得0-1的随机数 
 i = Mathceil(i * 10) //乘以10并向上去整 
 var words = ['龙', '一', '万', '千', '浩', '金', '得', '而', '可', '人']; 
 var word = words[i]; 
 wxrequest({ 
  url: 'http://apiavatardatacn/ChengYu/Search?key=77f072d28eb141c8b6dda145ca364b92&keyWord=' + word, 
 
  complete: function (res) { 
  if (resdatareason == 'Succes') { 
   setTimeout(function () { 
   _thissetData({ 
    words: resdataresult 
   }) 
   }, 2000) 
  } 
  setTimeout(function () { 
   _thissetData({ 
   refreshing: false 
   }) 
  }, 2500) 
  } 
 }) 
 }, 
 start: function (e) { 
 var startPoint = etouches[0] 
 var clientY = startPointclientY; 
 thissetData({ 
  clientY: clientY, 
  refreshHeight: 0 
 }) 
 }, 
 end: function (e) { 
 var endPoint = echangedTouches[0] 
 var y = (endPointclientY - thisdataclientY) * 6; 
 if (y > 50) { 
  y = 50; 
 } 
 thissetData({ 
  refreshHeight: y 
 }) 
 }, 
 move: function (e) { 
 consolelog("下拉滑动了") 
 } 
}) 
 
/** 
 * 旋转上拉加载图标 
 */ 
function updateRefreshIcon() { 
 var deg = 0; 
 var _this = this; 
 consolelog('旋转开始了') 
 var animation = wxcreateAnimation({ 
 duration: 1000 
 }); 
 
 var timer = setInterval(function () { 
 if (!_thisdatarefreshing) 
  clearInterval(timer); 
 animationrotateZ(deg)step();//在Z轴旋转一个deg角度 
 deg += 360; 
 _thissetData({ 
  refreshAnimation: animationexport() 
 }) 
 }, 1000); 
}

2.index.wxml

<!--indexwxml--> 
 <view class="refresh-block" style="height: {{refreshHeight}}px;" wx:if="{{refreshing}}"> 
 <image animation="{{refreshAnimation}}" src="/images/refreshpng"></image> 
 </view> 
<scroll-view scroll-y="true" style="height: {{windowHeight}}px;" bindscroll="scroll" bindscrolltolower="lower" bindscrolltoupper="upper" 
catchtouchmove="move" catchtouchstart="start" catchtouchend="end" 
> 
<block wx:for="{{words}}"> 
  <view class="item-style">{{itemname}}</view> 
</block> 
</scroll-view>

3.index.wxss

/**indexwxss**/ 
item-style{ 
 padding: 30rpx; 
 font-size: 40rpx; 
 text-align: center; 
 border-top: 2rpx solid #eee; 
} 
refresh-block { 
 padding: 15px; 
 text-align: center 
} 
refresh-block image { 
 width: 30px; 
 height: 30px; 
}

demo:下载地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery 学习笔记(一)
Oct 13 Javascript
JavaScript参数个数可变的函数举例说明
Oct 10 Javascript
node.js中的fs.fsyncSync方法使用说明
Dec 15 Javascript
jquery显示loading图片直到网页加载完成的方法
Jun 25 Javascript
jQuery实现带动画效果的多级下拉菜单代码
Sep 08 Javascript
js实现商品抛物线加入购物车特效
Nov 18 Javascript
IONIC自定义subheader的最佳解决方案
Sep 22 Javascript
浅谈通过JS拦截 pushState和replaceState事件
Jul 21 Javascript
通过示例彻底搞懂js闭包
Aug 10 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
Oct 31 Javascript
JS实现登录页密码的显示和隐藏功能
Dec 06 Javascript
Javascript实现单选框效果
Dec 09 Javascript
微信小程序-消息提示框实例
Nov 24 #Javascript
jQuery实现的模拟弹出窗口功能示例
Nov 24 #Javascript
基于JavaScript实现Tab选项卡切换效果
Nov 24 #Javascript
javascript实现获取图片大小及图片等比缩放的方法
Nov 24 #Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
Nov 24 #Javascript
Javascript 数组去重的方法(四种)详解及实例代码
Nov 24 #Javascript
BootStrap树状图显示功能
Nov 24 #Javascript
You might like
php中iconv函数使用方法
2008/05/24 PHP
理解php原理的opcodes(操作码)
2010/10/26 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
php中call_user_func函数使用注意事项
2014/11/21 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
jQuery数组处理方法汇总
2011/06/20 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
python实现在pickling的时候压缩的方法
2014/09/25 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
python自定义异常实例详解
2017/07/11 Python
Python面向对象进阶学习
2019/05/21 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
最新英语专业学生求职信范文
2013/09/21 职场文书
人力资源总监工作说明
2014/03/03 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js
nginx 添加http_stub_status_module模块
2022/05/25 Servers