微信小程序下拉刷新、上拉加载

article/2025/10/12 19:53:38

微信小程序官方没有给出具体的下拉刷新和上拉加载组件,我们可以基于小程序原生组件scroll-view的扩展与封装,实现简单的上拉加载、下拉刷新组件。

1. 封装组件

// components/customPullDown/index.js
Component({options: {multipleSlots: true},properties: {changeBoundaryThreshold: {type: Number,default: 45},},observers: {'changeBoundaryThreshold': function (val) {this.setData({changeBoundary: val})}},data: {refresherTriggered: false,changeBoundary: 45},methods: {onReachBottom (event) {this.triggerEvent('onReachBottom')},onRefresherRestore (event) {this.triggerEvent('onRefresherRestore')},onRefresherAbort (event) {this.triggerEvent('onRefresherAbort')},onPullDownRefresh (event) {this.setTriggerStatus(true)setTimeout(() => {this.setTriggerStatus(false)}, 1000)},setTriggerStatus (bool) {this.setData({refresherTriggered: bool})this.triggerEvent(bool ? 'onPullDownRefreshStart' : 'onPullDownRefreshEnd')}}
})
// components/customPullDown/index.json
{"component": true,"usingComponents": {}
}
<!-- components/customPullDown/index.wxml -->
<wxs module="pullDown" src="./pullDown.wxs"></wxs>
<view class="pull-down"><scroll-viewrefresher-enabledscroll-yscroll-with-animationrefresher-default-style="none"refresher-triggered="{{refresherTriggered}}"bindrefresherpulling="{{pullDown.onContentPull}}"bindrefresherrestore="{{pullDown.onRestore}}"bindrefresherabort="{{pullDown.onAbort}}"bindrefresherrefresh="{{pullDown.onRefresh}}"bindscrolltolower="onReachBottom"class="scroll-box"><view slot="refresher" class="custom-refresh-zone" data-threshold="{{changeBoundary}}"><view class="refresh-before-trigger"><view class="custom-refresh-zone-tips-loading">继续下拉刷新</view></view><view class="refresh-after-trigger"><view class="custom-refresh-zone-tips-loading">释放刷新</view></view><view class="refresh-loading"><view class="custom-refresh-zone-tips-loading">加载中...</view></view></view><view><view name="refresh-animation"></view><slot name="content"></slot></view></scroll-view>
</view>
/* components/customPullDown/index.wxss */
.pull-down{width: 100%;height: 100%;position: relative;
}
.scroll-box{width: 100%;height: 100%;
}
.custom-refresh-zone{width: 100%;display: flex;align-items: flex-start;justify-content: center;
}
.refresh-loading{width: 100%;
}.custom-refresh-zone .refresh-before-trigger,
.custom-refresh-zone .refresh-after-trigger{display: none;
}
.custom-refresh-zone.refresher-before .refresh-before-trigger,
.custom-refresh-zone.refresher-after .refresh-after-trigger{width: 100%;display: block;
}
.custom-refresh-zone.refresher-before .refresh-loading,
.custom-refresh-zone.refresher-after .refresh-loading{display: none;
}
.custom-refresh-zone-tips-loading{display: flex;align-items: flex-start;justify-content: center;width: 100%;color: #bbb;font-size: 26rpx;padding: 10rpx;
}
.custom-refresh-zone-tips-loading.white {color: #fff;
}
/* components/customPullDown/pullDown.wxs */
var refresherBefore = 'refresher-before'
var refresherAfter = 'refresher-after'function getComponent(name, selector) {return function(instance) {var state = instance.getState()return state[name] || (state[name] = instance.selectComponent(selector))}
}
var getCustomRefresher = getComponent('customRefresher', '.custom-refresh-zone')module.exports = {onContentPull: function (event, ownerInstance) {var scrollY = event.detail.dy // 滚动距离// 根据滚动距离切换状态var customRefresher = getCustomRefresher(ownerInstance)var threshold = customRefresher.getDataset().thresholdvar isLargerThanTriggerThreshold = scrollY > thresholdcustomRefresher.addClass(isLargerThanTriggerThreshold ? refresherAfter : refresherBefore).removeClass(isLargerThanTriggerThreshold ? refresherBefore : refresherAfter)},onRestore: function (event, ownerInstance) {ownerInstance.callMethod('onRefresherRestore', event)},onAbort: function (event, ownerInstance) {ownerInstance.callMethod('onRefresherAbort', event)},onRefresh: function (event, ownerInstance) {var customRefresher = getCustomRefresher(ownerInstance)customRefresher.removeClass(refresherAfter, refresherBefore)ownerInstance.callMethod('onPullDownRefresh', event)},
}

2. 业务页面使用

<!-- pages/service/service.wxml -->
<view style="height: 500rpx;border: 1px solid red;"><custom-pull-down class="custom-pull-down" bind:onReachBottom="onReachBottom"bind:onPullDownRefreshEnd="onPullDownRefreshEnd"><view slot="content" style="padding: 25rpx;"><view wx:for="{{ list }}" wx:key="name" class="item"><view>{{ item.name }}</view></view></view></custom-pull-down>
</view>
// pages/service/service.js
Page({data: {list: [{ name: 1 },{ name: 2 },{ name: 3 },{ name: 4 },{ name: 5 },{ name: 6 },{ name: 7 },{ name: 8 },]},onPullDownRefreshEnd(){console.log("下拉刷新...")},onReachBottom(){console.log("上拉加载...")}
})
// pages/service/service.json
{"usingComponents": {"custom-pull-down": "/components/customPullDown/index"}
}
/* pages/service/service.wxss */
.item {height: 80rpx;text-align: center;background-color: aquamarine;margin-bottom: 30rpx;![请添加图片描述](https://img-blog.csdnimg.cn/0672f383e2674c7e890fe66746b841b7.gif)}

实现效果:
在这里插入图片描述

这里需要注意一般上拉加载会加载下一页,要考虑事件会重复触发,需要在请求里判断当前是否是请求中状态;还需要注意如果后端没有下一页了需要显示【没有更多数据了】的字眼。


http://chatgpt.dhexx.cn/article/8iLc47h1.shtml

相关文章

uniapp局部上拉加载数据

一、页面局部实现上拉加载数据 只有评论区可以上拉加载数据&#xff0c;网上找到了 vue-infinite-scroll二、使用 官方示例 1、 npm 加载依赖 npm install vue-infinite-scroll --save2、 单个页面引用 import infiniteScroll from vue-infinite-scrollexport default {dire…

【Compose】亲手封装一个简单灵活的下拉刷新上拉加载 Compose Layout

Compose 的下拉刷新有现成的 Material 库可以直接使用&#xff0c;非常简单方便。 但是上拉加载目前没看到有封装的特别好的库&#xff0c;Paging 有些场景无法满足&#xff0c;而且上拉加载也是个比较简单的功能&#xff0c;没必要再去依赖一个质量未知的库。我们可以基于目前…

如何实现上拉加载,下拉刷新?

如何实现上拉加载下拉刷新&#xff1f; 实现原理上拉加载下拉刷新 实现原理 上拉加载及下拉刷新都依赖于用户交互 最重要的是要理解在什么场景&#xff0c;什么时机下触发交互动作 上拉加载 首先可以看一张图 上拉加载的本质是页面触底&#xff0c;或者快要触底时的动作 判…

【前端知识之JS】如何实现上拉加载和下拉刷新

前言 本系列主要整理前端面试中需要掌握的知识点。本节介绍如何实现上拉加载和下拉刷新。 文章目录 前言一、介绍二、实现原理1、上拉加载2、下拉刷新 一、介绍 下拉刷新和上拉加载这两种交互方式通常出现在移动端中&#xff1b;本质上等同于PC网页中的分页&#xff0c;只是交…

大数据和人工智能到底是什么关系

大数据和人工智能的关系&#xff0c;首先要说什么是大数据。这些年来&#xff0c;大数据先是被神化&#xff0c;继而又被妖魔化&#xff0c;到了今天&#xff0c;其实谁也不知道别人所谓的大数据指的是什么。有时候大数据的定义里既有平台&#xff08;硬件&#xff09;又有分析…

大数据和人工智能AI的联系和区别

大数据和人工智能两个词是我们现在频繁听到的两个词汇&#xff0c;那么这两者之间到底有什么联系 首先我们要了解到什么是大数据&#xff1f;什么是人工智能&#xff1f;大数据就是一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合&…

人工智能、机器学习、深度学习 三者关系

目录 1、AI ML DL关系 2、发展历程 2.1、人工智能&#xff08;ArtificiaI Intelligence&#xff09; 2.2、机器学习&#xff08;Machine Learning&#xff09; 2.3、深度学习&#xff08;Deep Learning&#xff09; 1、AI ML DL关系 为了赋予计算机以人类的理解能力与逻辑…

云计算、大数据和人工智能三者到底什么关系

今天跟大家讲讲云计算、大数据和人工智能。为什么讲这三个东西呢&#xff1f;因为这三个东西现在非常火&#xff0c;并且它们之间好像互相有关系&#xff1a;一般谈云计算的时候会提到大数据、谈人工智能的时候会提大数据、谈人工智能的时候会提云计算……感觉三者之间相辅相成…

人工智能和大数据分析之间,主要有什么区别

首先来看看认知计算和人工智能的区别 人工智能的概念已经有二十多年&#xff0c;人工智能从历史和研究角度来讲主要目的是为了让机器表现的更像人类&#xff0c;我们称之为Intelligent Behavior。IBM的认知计算从技术角度上讲和AI是有很多共性的地方&#xff0c;比如机器学习&…

人工智能与大数据的完美结合

人工智能(AI)已经存在几十年了。然而&#xff0c;最近随着“大数据”的出现&#xff0c;它得到了越来越多的关注。维基百科对人工智能的释义如下: 在计算机科学中&#xff0c;人工智能研究的领域将自己定义为“智能代理AI和大数据&#xff1a;完美结合”的研究&#xff1a;任何…

大数据和人工智能的概念

大数据和人工智能的概念 概述大数据和人工智能领域的一些热门趋势。我们将看到世界如何通过数字化而改变&#xff0c;从而导致消费和工业领域的大数据现象&#xff1b;了解到数据量呈指数级增长&#xff0c;从太字节到艾字节再到泽字节&#xff1b;意识到计算机的处理能力增加…

云计算、大数据和人工智能之间的关系

大家好&#xff0c;这里是抖码课堂&#xff0c;抖码课堂专注提升互联网技术人的软硬实力。 这篇文章我们从下面的内容来聊下云计算、人工智能、大数据技术三者之间的关系 探讨什么是云计算&#xff0c;在这里分别探讨云计算的 IaaS、PaaS 以及 SaaS 探讨云计算和大数据技术之…

大数据属于人工智能吗?什么是大数据?

对于“大数据”(Big data)研究机构Gartner给出了这样的定义。“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。大数据属于人工智能吗&#xff1f;本篇来解答一下这个问题。 大数据属于人工智能吗&#xff…

大数据和人工智能之间,主要有什么区别?

大数据vs.人工智能是一种公平的比较吗?在某种程度上&#xff0c;它是&#xff0c;但首先让我们先厘清它们之间的区别。 人工智能和大数据是人们耳熟能详的流行术语&#xff0c;但也可能会有一些混淆。人工智能和大数据有什么相似之处和不同之处?它们有什么共同点吗?它们是否…

AI和大数据的关系

近几年随着AlphaGO的骄人战绩&#xff0c;人工智能和大数据备受追捧&#xff0c;热度空前。而在实际接触中&#xff0c;大家对人工智能和大数据的认知普遍是“只知其名不知其意”&#xff0c;因此对企业而言&#xff0c;猎头的推荐也往往与岗位匹配度不高。那么被人们认为高深莫…

云计算、大数据和人工智能的关系

云计算、大数据和人工智能的关系 来源&#xff1a; 刘超&#xff08;popsuper1982&#xff09; https://www.cnblogs.com/popsuper1982/p/8505203.html 我今天要讲这三个话题&#xff0c;一个是云计算&#xff0c;一个大数据&#xff0c;一个人工智能&#xff0c;我为什么要讲…

大数据,云计算,人工智能之间的关系

一、云计算最初是实现资源管理的灵活性 我们首先来说云计算&#xff0c;云计算最初的目标是对资源的管理&#xff0c;管理的主要是计算资源&#xff0c;网络资源&#xff0c;存储资源三个方面。 1.1 管数据中心就像配电脑 什么叫计算&#xff0c;网络&#xff0c;存储资源呢&am…

关于大数据和人工智能发展的思考

10月12日&#xff0c;第七届中国智能产业高峰论坛在佛山开幕&#xff0c;在第一天的主论坛上&#xff0c;北京拓尔思信息技术股份有限公司副董事长、总裁施水才发表了主题为《大数据和人工智能发展的思考》的精彩演讲。 在演讲中&#xff0c;施水才先生从自身多年大数据技术和服…

大数据和人工智能的关系,超全解析

大数据拥抱云计算 在PaaS层中一个复杂的通用应用就是大数据平台。大数据是如何一步一步融入云计算的呢&#xff1f; 1数据不大也包含智慧 一开始这个大数据并不大。原来才有多少数据&#xff1f;现在大家都去看电子书&#xff0c;上网看新闻了&#xff0c;在我们80后小时候&…

云计算、大数据、人工智能的关系

云计算,大数据,人工智能以及他们的关系。 一、云计算最初是实现资源管理的灵活性 我们首先来说云计算,云计算最初的目标是对资源的管理,管理的主要是计算,存储,网络资源。 1.1 管数据中心就像配电脑 什么叫计算,存储,网络资源呢?就说你要买台笔记本电脑吧,你是不是…