微信小步伐-下拉滚动加载数据

[复制链接]
发表于 2025-9-23 07:27:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1.实现流程图

所谓工欲善其事,必先利其器,做步伐之前咱们把思绪整理一下 ,画流程图是比力好的方式


2.前端JS 和 WXML

视图绑定  scrollToLower 方法 ,当离底部另有100时间触发;

WXML:
  1. <scroll-view scroll-y lower-threshold="100" bindscrolltolower="scrollToLower" style="height: 100vh;">
  2.     <view class="items" wx:for="{{list}}" wx:key="{{item.id}}">
  3.    
  4.     <image src="{{item.img}}"/>
  5.    
  6.     <view class="datas">
  7.    
  8.    
  9.     <view class="beauty">订单金额:{{item.price}}元</view>
  10.    
  11.    
  12.     <view class="times">2022-09-30</view>
  13.    
  14.     </view>
  15.     </view>
  16. </scroll-view>
  17. <view class='text-style'>{{text}}</view>
复制代码
datalock 即是1 时, 不发出网络请求, 已免不须要的网络开销;
数据返回时 利用 concat 拼接

JS:
  1.     data: {
  2.    
  3.     list:[],
  4.    
  5.     page:1,
  6.    
  7.     text:'',
  8.    
  9.     datalock:0
  10.     },
  11.     onLoad: function (options) {
  12.    
  13.     this.getDatas();
  14.     },
  15.     scrollToLower:function(){
  16.    
  17.     if(this.data.datalock==1){
  18.    
  19.    
  20.     return false;
  21.    
  22.     }else{
  23.    
  24.    
  25.     wx.showToast({
  26.    
  27.    
  28.    
  29.     title: '加载中...',
  30.    
  31.    
  32.    
  33.     icon:"loading",
  34.    
  35.    
  36.    
  37.     duration:600
  38.    
  39.    
  40.     });
  41.    
  42.    
  43.     this.getDatas();
  44.    
  45.     }  
  46.     },getDatas:function(){
  47.    
  48.     var that = this;
  49.    
  50.     wx.request({
  51.    
  52.    
  53.     url:'https://www.test.com/loaddata',
  54.    
  55.    
  56.     method:"GET",
  57.    
  58.    
  59.     data:{
  60.    
  61.    
  62.    
  63.     token:wx.getStorageSync('userid'),
  64.    
  65.    
  66.    
  67.     page:that.data.page,
  68.    
  69.    
  70.     },
  71.    
  72.    
  73.     success:function(res){
  74.    
  75.    
  76.    
  77.     //console.log(res.data);
  78.    
  79.    
  80.    
  81.     if(res.data.data.length > 0 ){
  82.    
  83.    
  84.    
  85.    
  86.     let newlist = that.data.list.concat(res.data.data); //拼接数据
  87.    
  88.    
  89.    
  90.    
  91.     for(let i=0;i<newlist.length;i++){
  92.    
  93.    
  94.    
  95.    
  96.    
  97.     newlist[i].jsonformat =  JSON.parse(newlist[i].json);
  98.    
  99.    
  100.    
  101.    
  102.    
  103.     newlist[i].timeformat =  tools.formatTime(newlist[i].addtime,'Y-M-D h:m');
  104.    
  105.    
  106.    
  107.    
  108.     }
  109.    
  110.    
  111.    
  112.    
  113.     that.setData({
  114.    
  115.    
  116.    
  117.    
  118.    
  119.     list : newlist,
  120.    
  121.    
  122.    
  123.    
  124.    
  125.     page : that.data.page +1,
  126.    
  127.    
  128.    
  129.    
  130.    
  131.     text: '加载更多'
  132.    
  133.    
  134.    
  135.    
  136.     });
  137.    
  138.    
  139.    
  140.    
  141.     //console.log(that.data.list);
  142.    
  143.    
  144.    
  145.     }else{
  146.    
  147.    
  148.    
  149.    
  150.     that.setData({
  151.    
  152.    
  153.    
  154.    
  155.    
  156.     text: '到底啦!',
  157.    
  158.    
  159.    
  160.    
  161.    
  162.     datalock:1
  163.    
  164.    
  165.    
  166.    
  167.     });
  168.    
  169.    
  170.    
  171.     }
  172.    
  173.    
  174.    
  175.    
  176.    
  177.    
  178.     },fail:function(res){
  179.    
  180.    
  181.    
  182.     console.log(res);
  183.    
  184.    
  185.    
  186.    
  187.    
  188.    
  189.     }
  190.    
  191.     });
  192.     }
复制代码
  1.    
复制代码
3.后端代码

这里利用tp6.1 来做接口通讯
  1. use think\Request;
  2. use think\Db;
  3. use think\Config;
  4. ...
  5. public function loaddata(Request $request){
  6.         $token = trim($request->param('token'));
  7.         $page = intval($request->param('page'));
  8.         $pageNum = 5;
  9.         if(!$page){
  10.                 $page=1;
  11.         }
  12.         $res_data = Db::name('usercolor')->where("uidtoken='".$token."'")->order('id desc')->limit(($page-1)*$pageNum,$pageNum)->select();
  13.         if($res_data){
  14.                 make_jsons($res_data);
  15.                 exit();
  16.         }else{
  17.                 make_jsons([],400,'error');
  18.                 exit();
  19.         }
  20. }
  21. ...
复制代码
顺带附上make_jsons方法:
  1. function make_jsons($dataArr=[],$code=200,$message='suc'){
  2.         $codedata = [  
  3.                 'status' => $code,  
  4.                 'message' => $message,  
  5.                 'data' =>$dataArr,  
  6.         ];  
  7.         echo  json_encode($codedata);
  8.         exit();
  9.        
  10. }
复制代码



回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表