支付宝小程序 | 下拉刷新、自动刷新、上拉加载

支付宝,程序,下拉,刷新,自动,加载 · 浏览次数 : 90

小编点评

**代码示例** ```typescript import { Page, View, Text, ViewArray, ViewBlock, ViewList } from 'showdown'; // 示例数据 const list = [ { name: '螺Dès粉', value: 1 }, { name: '酸辣粉', value: 2 }, { name: '羊肉粉', value: 3 }, ]; // 示例页面 export default class Demo extends Page { data = { list: list, loading: false, time: 0 }; onPullDownRefresh() { // 下拉刷新逻辑 } handleStartRefresh() { // 自动刷新 } } ``` **用法** 1. 将代码中的 `list` 数据替换为您要展示的数据。 2. 设置页面属性 `pullRefresh` 为 `true`。 3. 在 `onPullDownRefresh` 方法中编写下拉刷新逻辑。 4. 在 `handleStartRefresh` 方法中编写自动刷新逻辑。 **示例演示** 当页面滚动到底部时,会触发 `onReachBottom` 方法,并模拟下拉刷新动画。当数据加载完后, `onPullDownRefresh` 方法会被调用并触发 `setData` 方法更新页面数据。

正文

下拉刷新

(一)onPullDownRefresh方法

模拟器效果展示

demo.gif

实现如下

1、配置下拉选项

demo.json

{
  "pullRefresh": true
}

2、定义下拉方法

demo.js

onPullDownRefresh() {
  //做相应的逻辑处理
},

3、停止下拉

在加载完数据后停止下拉

my.stopPullDownRefresh()

如上案例完整代码如下

demo.axml

<view class="demo">
  <text a:if="{{ list.length == 0 ? true: false }}">没数据?试试下拉刷新😆</text>
  <view a:for="{{ list }}">
    {{item.name}}
  </view>
</view>

demo.less

.demo{
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    height: 200px;
    width: 100%;
}

demo.json

{
  "usingComponents": {},
  "styleIsolation": "apply-shared",
  "pullRefresh": true
}

demo.ts

Page({
  data: {
    list: [],
  },
  onLoad() {},
  onPullDownRefresh() {
    this.getList()
  },
  getList() {
    setTimeout(()=>{
      this.setData({
        list: [
          { name: '螺蛳粉', value: 1 },
          { name: '酸辣粉', value: 2 },
          { name: '羊肉粉', value: 3 },
        ],
      })
      my.stopPullDownRefresh()
    },1000)
  },
})

(二)自定义下拉刷新

参考文档:https://blog.csdn.net/qq_42345108/article/details/124321126

自动刷新

(一)my.startPullDownRefresh() 方法

效果

demo3.gif

调用 my.startPullDownRefresh 后触发下拉刷新动画,效果与用户手动下拉刷新一致(会触发 onPullDownRefresh 监听方法)。

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

如上案例完整代码如下

demo.axml

<view class="demo">
  <block a:if="{{ list.length == 0 ? true: false }}">
    <view a:if="{{ time==0 ? true:false }}" class="button" onTap="handleStartRefresh">
      开启自动刷新
    </view>
    <view a:else>
      {{time}}秒后自动刷新
    </view>
  </block>
  <view a:else class="list">
    <text>刷新成功😆</text>
    <view a:for="{{ list }}"> {{item.value}}碗---{{item.name}}</view>
  </view>
</view>

demo.less

.demo {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  width: 100%;
  padding-top: 60px;
  .button {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100px;
    height: 40px;
    border-radius: 20px;
    color: #FFFFFF;
    background: #FFA336;
  }
  .list{
    display: flex;
    flex-direction: column;
    align-items: center;
  }
}

demo.json

{
  "usingComponents": {},
  "styleIsolation": "apply-shared",
  "pullRefresh": true
}

demo.ts

Page({
  data: {
    list: [],
    loading: false,
    time: 0,
  },
  onPullDownRefresh() {
    this.setData({
      list: [
        ...[...Array(10)].map((_, i) => ({
          value: i + 1,
          name: '螺蛳粉',
        })),
      ],
    })
    my.stopPullDownRefresh()
  },
  handleStartRefresh() {
    this.setData({
      time: 5,
    })
    setInterval(() => {
      if (this.data.time == 1) {
        my.startPullDownRefresh()
        return
      }
      this.setData({
        time: this.data.time - 1,
      })
    }, 1000)
  },
})

参考文档:https://opendocs.alipay.com/mini/api/ui-pulldown

上拉加载

(一)onReachBottom方法

onReachBottom在上拉触底时触发

模拟器效果展示

demo2.gif

如上案例完整代码如下

demo.axml

<view class="demo">
  <view>
    没看够?试试上拉加载😆
  </view>
  <view a:for="{{ list }}">
    {{item.value}}碗-----{{item.name}}
  </view>
  <view a:if="{{ loading }}" class="loading">
    正在加载中~~🌻
  </view>
</view>

demo.less

.demo{
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    width: 100%;
    padding-bottom: 30px;
    .loading{
        margin-top: 8px;
    }
}

demo.ts

Page({
  data: {
    list: [
      ...[...Array(10)].map((_, i) => ({
        value: i + 1,
        name: '螺蛳粉',
      })),
    ],
    loading: false,
  },
  onReachBottom() {
    this.setData({
      loading: true,
    })
    const data = [
      ...[...Array(30)].map((_, i) => ({
        value: i + this.data.list.length + 1,
        name: '螺蛳粉',
      })),
    ]
    setTimeout(() => {
      this.setData({
        list: this.data.list.concat(data),
        loading:false
      })
    }, 2000)
  },
})

参考文档:https://opendocs.alipay.com/mini/framework/page-detail#onReachBottom()

(二)scroll-view组件的onScrollToLower方法

<scroll-view scroll-y="{{true}}" onScrollToLower="handleScrollToLower" style="height:100px">
    <view a:for="{{ list }}">
      {{item.value}}碗-----{{item.name}}
    </view>
  </scroll-view>
 handleScrollToLower() {
    //加载数据,做数据处理
  },

注:scroll-view必须 设置高度

与支付宝小程序 | 下拉刷新、自动刷新、上拉加载 相似的内容:

支付宝小程序 | 下拉刷新、自动刷新、上拉加载

下拉刷新 (一)onPullDownRefresh方法 模拟器效果展示 实现如下 1、配置下拉选项 demo.json { "pullRefresh": true } 2、定义下拉方法 demo.js onPullDownRefresh() { //做相应的逻辑处理 }, 3、停止下拉 在加载完数据

DevOps|1024程序员节怎么做?介绍下我的思路

1024,祝每个程序员小哥哥小姐姐节日快乐。 因为在研发效能部门,我支持过几次 1024 程序员节的活动,所以经常有朋友问我1024 程序员节怎么做,本篇就是简单介绍下我的思路,希望对你有用。 1024程序员节的由来 俄罗斯把每年第256(=2^8)天,即平年9月13日或闰年9月12日定为国际程序员

支付宝小程序 | 自定义标题导航栏

效果 一 、page.json "transparentTitle": "always" 二、page.axml

支付宝小程序 | 获取网络状态

追光者终将光芒万丈

支付宝小程序 | 上传图片组件(添加默认样式以及自定义上传样式)

人们害怕他们不理解的东西。 People are afraid of what they don't understand.

小程序中使用 lottie 动画 | 踩坑经验分享

最近被拉去支援紧急需求(赶在五一节假日前上线的,双休需要加班),参与到项目中才知道,开发的项目是微信小程序技术栈的。由于是临时支援,笔者也很久没开发过微信小程序了,所以挑选了相对独立,业务属性相对轻薄的模块参与。 其中有个营销活动(领红包)的弹窗动画就要用到 lottie 动画。 本文就

基于uniapp+vue3自定义增强版table表格组件「兼容H5+小程序+App端」

vue3+uniapp多端自定义table组件|uniapp加强版综合表格组件 uv3-table:一款基于uniapp+vue3跨端自定义手机端增强版表格组件。支持固定表头/列、边框、斑马纹、单选/多选,自定义表头/表体插槽、左右固定列阴影高亮显示。支持编译兼容H5+小程序端+App端。 如下图:

uniapp+vue3聊天室|uni-app+vite4+uv-ui跨端仿微信app聊天语音/朋友圈

原创研发uniapp+vue3+pinia2跨三端仿微信app聊天模板Uniapp-Wechat。 uni-vue3-wchat基于uni-app+vue3+pinia2+uni-ui+uv-ui等技术跨端仿制微信App界面聊天项目,支持编译到H5+小程序端+App端。实现编辑框多行消息/emoj混

网易面试:SpringBoot如何开启虚拟线程?

虚拟线程(Virtual Thread)也称协程或纤程,是一种轻量级的线程实现,与传统的线程以及操作系统级别的线程(也称为平台线程)相比,它的创建开销更小、资源利用率更高,是 Java 并发编程领域的一项重要创新。 PS:虚拟线程正式发布于 Java 长期支持版(Long Term Suort,LT

uniapp微信小程序转支付宝小程序踩坑(持续更新)

首先第一个,真有被折磨到! // 微信正常使用,支付宝不行 // 以下两种 微信、支付宝都正常使用