ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在 uniapp 框架中,修改页面刷新(比如下拉刷新、页面跳转加载等场景)时的 “loading” 图片,可分不同场景处理,以下是常见方式: ### 一、修改全局页面加载(如应用启动、页面跳转时的默认 loading ) 1. **通过`manifest.json`配置(针对 App 端)** uniapp 中,App 启动、页面切换时的默认 loading 样式,可在`manifest.json`里设置。找到项目根目录的`manifest.json`文件(HBuilderX 中可直接可视化配置或编辑源码),在`app-plus`节点(App 特有配置)下添加或修改`loading`相关配置: json ~~~json { "app-plus": { "loading": { "text": "加载中...", // 加载提示文字 "color": "#FFFFFF", // 文字颜色 "background": "#000000", // 背景颜色 "logo": "static/custom-loading.png", // 自定义 loading 图片路径,建议用本地静态资源,尺寸等需适配 "animation": "fade" // 动画效果,可选 fade(渐变)、zoom(缩放)等 } } } ~~~ 保存后重新编译 App ,就能看到自定义的加载样式。注意:`logo`路径要正确,且图片格式、尺寸需适配不同设备,一般建议用简单的动画图或静态标识图。 2. **自定义全局加载组件(跨端通用思路)** 若想更灵活控制(比如不同页面 / 业务场景用不同 loading ),可自己封装全局 loading 组件: * **步骤 1:创建 loading 组件** 在项目的`components`目录新建`custom-loading`组件(如`custom-loading.vue`),内容示例: html ~~~html <template> <view class="custom-loading" v-show="show"> <image class="loading-img" :src="imgUrl"></image> <text class="loading-text">{{text}}</text> </view> </template> <script> export default { data() { return { show: false, text: "加载中", imgUrl: "/static/custom-loader.png" // 自定义 loading 图片路径 }; }, methods: { showLoading(newText = "加载中") { this.text = newText; this.show = true; }, hideLoading() { this.show = false; } } }; </script> <style scoped> .custom-loading { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.6); display: flex; flex-direction: column; justify-content: center; align-items: center; z-index: 9999; } .loading-img { width: 60rpx; height: 60rpx; } .loading-text { margin-top: 20rpx; color: #fff; } </style> ~~~ * **步骤 2:全局注册 / 引用组件** 在`App.vue`中引入并注册,通过全局事件(如`uni.$emit`/`uni.$on`)控制显示隐藏: html ~~~html <template> <view class="app"> <custom-loading ref="customLoading"></custom-loading> <router-view></router-view> </view> </template> <script> import customLoading from "@/components/custom-loading.vue"; export default { components: { customLoading }, onLaunch() { // 全局监听显示 loading 事件 uni.$on("showCustomLoading", (text) => { this.$refs.customLoading.showLoading(text); }); // 全局监听隐藏 loading 事件 uni.$on("hideCustomLoading", () => { this.$refs.customLoading.hideLoading(); }); } }; </script> ~~~ * **步骤 3:在页面 / 业务中调用** 需要显示 loading 时,用`uni.$emit`触发: js ~~~js // 某个页面的 js 中 uni.$emit("showCustomLoading", "数据加载中..."); // 数据请求完成后隐藏 setTimeout(() => { uni.$emit("hideCustomLoading"); }, 2000); ~~~ ### 二、修改下拉刷新的 loading 样式(页面下拉刷新场景) uniapp 页面下拉刷新的 loading ,可通过`pages.json`或页面内配置自定义: 1. **通过`pages.json`全局 / 页面级配置** 在`pages.json`中,给需要下拉刷新的页面配置`enablePullDownRefresh`,并自定义样式: json ~~~json { "pages": [ { "path": "pages/index/index", "style": { "enablePullDownRefresh": true, "pullDownRefresh": { "color": "#00FFFF", // 下拉刷新 loading 图标颜色(仅改变图标颜色,若要换图需结合其他方式) "style": "default", // 默认可选 default(小圆点),若想自定义更复杂样式,需自己实现 // 若想完全自定义下拉刷新的 loading 外观,可结合页面内的自定义组件覆盖默认 } } } ] } ~~~ 但默认配置只能改颜色、基础样式,若想替换成自定义图片,需自己实现下拉刷新逻辑(绕过 uniapp 原生的下拉刷新): 2. **自定义下拉刷新组件(替代原生下拉刷新)** * **步骤 1:禁用原生下拉刷新** 在`pages.json`对应页面关闭原生下拉刷新: json ~~~json { "pages": [ { "path": "pages/index/index", "style": { "enablePullDownRefresh": false } } ] } ~~~ * **步骤 2:自己实现下拉刷新逻辑 + 自定义 loading 图** 在页面中用`scroll-view`模拟下拉刷新,搭配自定义 loading 组件: html ~~~html <template> <scroll-view class="scroll-view" scroll-y @refresherpulling="onRefresherPulling" @refresherrefresh="onRefresherRefresh" @refresherrestore="onRefresherRestore" @refresherabort="onRefresherAbort" :refresher-enabled="true" :refresher-threshold="80" :refresher-default-style="refresherStyle" > <!-- 自定义 loading 区域 --> <view class="custom-refresher" v-show="isRefreshing"> <image class="refresher-img" :src="refresherImg"></image> <text class="refresher-text">{{refresherText}}</text> </view> <!-- 页面内容 --> <view class="content"> <!-- 你的页面内容 --> </view> </scroll-view> </template> <script> export default { data() { return { isRefreshing: false, refresherImg: "/static/pull-refresh.png", // 自定义下拉 loading 图 refresherText: "下拉刷新...", refresherStyle: { backgroundColor: "#f5f5f5" } }; }, methods: { onRefresherPulling() { this.refresherText = "松开刷新..."; }, onRefresherRefresh() { this.isRefreshing = true; this.refresherText = "加载中..."; // 模拟请求数据 setTimeout(() => { this.isRefreshing = false; this.refresherText = "下拉刷新..."; // 结束下拉刷新 this.$refs.scrollView && this.$refs.scrollView.finishPullToRefresh(); }, 2000); }, onRefresherRestore() { this.refresherText = "下拉刷新..."; }, onRefresherAbort() { this.refresherText = "下拉刷新..."; } } }; </script> <style scoped> .scroll-view { width: 100%; height: 100%; } .custom-refresher { display: flex; flex-direction: column; align-items: center; padding: 20rpx 0; } .refresher-img { width: 60rpx; height: 60rpx; } .refresher-text { margin-top: 10rpx; } .content { padding: 20rpx; } </style> ~~~ ### 三、总结 * **全局页面加载(启动、跳转)**:简单需求用`manifest.json`配置;复杂、灵活需求用**自定义全局组件 + 事件通信**。 * **下拉刷新 loading**:原生配置只能改基础样式,若要换图,需**自己用`scroll-view`实现下拉逻辑**,搭配自定义图片 / 动画。 根据实际场景选对应的方式,就能替换成你想要的 loading 图片啦,比如品牌专属的加载动画、更贴合 UI 风格的静态图等 。