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

发布时间 - 2026-01-10 22:30:39    点击率:

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

实现效果图:

方法一: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;
}

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


# 微信小程序下拉加载  # 上拉刷新  # 上拉刷新几种方法  # 上拉刷新实例详解  # 微信小程序实现触底加载与下拉刷新的示例代码  # 微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】  # 微信小程序 列表的上拉加载和下拉刷新的实现  # 微信小程序下拉加载和上拉刷新两种实现方法详解  # 微信小程序 scroll-view实现上拉加载与下拉刷新的实例  # 微信小程序实现列表下拉刷新上拉加载  # 微信小程序(六):列表上拉加载下拉刷新示例  # 详解微信小程序开发之下拉刷新 上拉加载  # 微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析  # 微信小程序实现触底加载  # 加载  # 定了  # 两种  # 要在  # 要注意  # 希望能  # 谢谢大家  # 栏中  # 加载中  # 必须要  # 事件中  # hideNavigationBarLoading  # scroll  # EventHandle  # bindscrolltoupper  # view  # bindscrolltolower  # complete  # CONNECT  # TRACE 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何创建自定义Facades?(详细步骤)  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  Laravel如何处理异常和错误?(Handler示例)  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel如何实现API资源集合?(Resource Collection教程)  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  如何快速生成专业多端适配建站电话?  详解jQuery中的事件  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  教你用AI润色文章,让你的文字表达更专业  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  如何在腾讯云服务器快速搭建个人网站?  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  EditPlus 正则表达式 实战(3)  Laravel如何自定义分页视图?(Pagination示例)  如何快速启动建站代理加盟业务?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  jQuery中的100个技巧汇总  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  如何在阿里云虚拟主机上快速搭建个人网站?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  网站制作壁纸教程视频,电脑壁纸网站?  如何续费美橙建站之星域名及服务?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel如何实现一对一模型关联?(Eloquent示例)  如何快速查询网址的建站时间与历史轨迹?  奇安信“盘古石”团队突破 iOS 26.1 提权  活动邀请函制作网站有哪些,活动邀请函文案?  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  JavaScript如何实现继承_有哪些常用方法  详解jQuery停止动画——stop()方法的使用  Laravel如何使用查询构建器?(Query Builder高级用法)  如何快速搭建二级域名独立网站?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Python图片处理进阶教程_Pillow滤镜与图像增强  如何安全更换建站之星模板并保留数据?  Android使用GridView实现日历的简单功能  nginx修改上传文件大小限制的方法  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  javascript中的try catch异常捕获机制用法分析  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  简单实现Android文件上传  高端云建站费用究竟需要多少预算?  如何选择PHP开源工具快速搭建网站?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  如何在Windows虚拟主机上快速搭建网站?