微信小程序 详解下拉加载与上拉刷新实现方法


Posted in Javascript onJanuary 13, 2017

微信小程序下拉刷新上拉加载的两种实现方法

实现效果图:

微信小程序 详解下拉加载与上拉刷新实现方法

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

首先要在json文件里设置window属性

            属性   类型                           描述
enablePullDownRefresh Boolean 是否开启下拉刷新,详见页面相关事件处理函数。

设置js里onPullDownRefresh和onReachBottom方法

属性    类型  描述
onPullDownRefresh function 页面相关事件处理函数——监听用户下拉动作
onReachBottom function 页面上拉触发底事件的处理函数

下拉加载说明:

当处理完数据刷新后,wx.stopPullDownRefresh可以停止当前页面的下拉刷新。

onPullDownRefresh(){
console.log('--------下拉刷新-------')

wx.showNavigationBarLoading() //在标题栏中显示加载
 

wx.request({
     url: 'https://URL',
     data: {},
     method: 'GET',
     // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
     // header: {}, // 设置请求的 header
     success: function(res){
      // success
     },
     fail: function() {
      // fail
     },
     complete: function() {
      // complete
      wx.hideNavigationBarLoading() //完成停止加载
      wx.stopPullDownRefresh() //停止下拉刷新
     }
  })

方法二:

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

属性    类型  描述
bindscrolltoupper EventHandle 滚动到顶部/左边,会触发 scrolltoupper 事件
bindscrolltolower EventHandle 滚动到底部/右边,会触发 scrolltolower 事件

index.wxml

<!--index.wxml-->
<view class="container" style="padding:0rpx">
 <!--垂直滚动,这里必须设置高度-->
  <scroll-view scroll-top="{{scrollTop}}" scroll-y="true" style="height:{{scrollHeight}}px;" 
    class="list" bindscrolltolower="bindDownLoad" bindscrolltoupper="topLoad" bindscroll="scroll">
    <view class="item" wx:for="{{list}}">
      <image class="img" src="{{item.pic_url}}"></image>
      <view class="text">
        <text class="title">{{item.name}}</text>
        <text class="description">{{item.short_description}}</text>
      </view>
    </view>
  </scroll-view>
  <view class="body-view">
    <loading hidden="{{hidden}}" bindchange="loadingChange">
      加载中...
    </loading>
  </view>
</view>

index.js

var url = "http://www.imooc.com/course/ajaxlist";
var page =0;
var page_size = 5;
var sort = "last";
var is_easy = 0;
var lange_id = 0;
var pos_id = 0;
var unlearn = 0;


// 请求数据
var loadMore = function(that){
  that.setData({
    hidden:false
  });
  wx.request({
    url:url,
    data:{
      page : page,
      page_size : page_size,
      sort : sort,
      is_easy : is_easy,
      lange_id : lange_id,
      pos_id : pos_id,
      unlearn : unlearn
    },
    success:function(res){
      //console.info(that.data.list);
      var list = that.data.list;
      for(var i = 0; i < res.data.list.length; i++){
        list.push(res.data.list[i]);
      }
      that.setData({
        list : list
      });
      page ++;
      that.setData({
        hidden:true
      });
    }
  });
}
Page({
 data:{
  hidden:true,
  list:[],
  scrollTop : 0,
  scrollHeight:0
 },
 onLoad:function(){
  //  这里要注意,微信的scroll-view必须要设置高度才能监听滚动事件,所以,需要在页面的onLoad事件中给scroll-view的高度赋值
   var that = this;
   wx.getSystemInfo({
     success:function(res){
       that.setData({
         scrollHeight:res.windowHeight
       });
     }
   });
    loadMore(that);
 },
 //页面滑动到底部
 bindDownLoad:function(){  
   var that = this;
   loadMore(that);
   console.log("lower");
 },
 scroll:function(event){
  //该方法绑定了页面滚动时的事件,我这里记录了当前的position.y的值,为了请求数据之后把页面定位到这里来。
   this.setData({
     scrollTop : event.detail.scrollTop
   });
 },
 topLoad:function(event){
  //  该方法绑定了页面滑动到顶部的事件,然后做上拉刷新
   page = 0;
   this.setData({
     list : [],
     scrollTop : 0
   });
   loadMore(this);
   console.log("lower");
 }
})

index.wxss

/**index.wxss**/

.userinfo {
 display: flex;
 flex-direction: column;
 align-items: center;
}

.userinfo-avatar {
 width: 128rpx;
 height: 128rpx;
 margin: 20rpx;
 border-radius: 50%;
}

.userinfo-nickname {
 color: #aaa;
}

.usermotto {
 margin-top: 200px;
}

/**/

scroll-view {
 width: 100%;
}

.item {
 width: 90%;
 height: 300rpx;
 margin: 20rpx auto;
 background: brown;
 overflow: hidden;
}

.item .img {
 width: 430rpx;
 margin-right: 20rpx;
 float: left;
}

.title {
 font-size: 30rpx;
 display: block;
 margin: 30rpx auto;
}

.description {
 font-size: 26rpx;
 line-height: 15rpx;
}

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

Javascript 相关文章推荐
清除网页历史记录,屏蔽后退按钮!
Dec 22 Javascript
犀利的js 函数集合
Jun 11 Javascript
点击下载链接 弹出页面实现代码
Oct 01 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
May 31 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
Node.js 中使用 async 函数的方法
Nov 20 Javascript
基于js 字符串indexof与search方法的区别(详解)
Dec 04 Javascript
微信小程序支付前端源码
Aug 29 Javascript
webpack优化的深入理解
Dec 10 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
Apr 17 Javascript
如何在项目中使用log4.js的方法步骤
Jul 16 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
Feb 12 Javascript
js实现文字向上轮播功能
Jan 13 #Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
Jan 13 #Javascript
js实现交通灯效果
Jan 13 #Javascript
微信小程序 简单教程实例详解
Jan 13 #Javascript
javascript构造函数以及原型对象的理解
Jan 13 #Javascript
微信小程序(六):列表上拉加载下拉刷新示例
Jan 13 #Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
Jan 13 #Javascript
You might like
PHP重定向的3种方式
2013/03/07 PHP
linux下php上传文件注意事项
2016/06/11 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
使用js判断当前时区TimeZone是否是夏令时
2014/02/23 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
2017/06/21 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
python实现人民币大写转换
2018/06/20 Python
Python实现FM算法解析
2019/06/18 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
Python基于Faker假数据构造库
2020/11/30 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
会话Bean的种类
2013/11/07 面试题
中医药大学市场营销专业自荐信
2013/09/29 职场文书
春节晚会开场白
2015/05/29 职场文书
九九重阳节致辞
2015/07/31 职场文书
纪律委员竞选稿
2015/11/19 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js