uniapp网络延迟优化之骨架屏


前言

uniapp网络延迟优化之骨架屏

一、骨架屏是什么?

骨架屏的主要目的是提升用户体验,特别是在网络条件不佳或页面内容较为复杂、加载时间较长的情况下。通过显示骨架屏,用户可以立即感知到页面正在加载,并且能够预测出页面内容的结构,从而减少等待过程中的不确定性和焦虑感。

二、使用步骤

1.在微信开发者工具生成骨架屏文件

代码如下(示例):
在这里插入图片描述

2.转成vue组件

因为生成的wxml文件,我们要在vue项目里去使用。
在src目录的自己的组件下创建一个components用来存放骨架屏组件。
在这里插入图片描述

在把微信开发者工具生成的wxml文件里面的标签复制到你创建的vue骨架屏组件中去。
注意:还要把wxss里面的样式也要存放到vue骨架屏组件里面去。
在这里插入图片描述

3.组件中使用

  1. 创建一个布尔值来控制你的骨架屏组件和本身自己要展示的组件。
  2. 页面初始化,一开始设置成isLoading设置为true。
  3. Promise.all()这个是用来限制,只有这4个请求全部返回成功才会放行,让后把isLoading设置为false,展示我们自己的组件就行了。

在这里插入图片描述

在这里插入图片描述

4.效果展示

在这里插入图片描述

4.开发时遇到的问题?

  1. 如果你生成的骨架屏组件不完整,你可以自行修改他的样式。(反正我是这样做的)但大部分都能满足需求。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了uniapp骨架屏的使用。其实还有很多可以生成骨架屏这种效果,比如uniapp插件市场可以去看看。

UNIAPP是一个基于Vue.js构建跨平台应用框架,支持原生体验、性能优化以及丰富的组件生态,能够同时生成iOS和Android应用。对于自动生成骨架(skeleton loading),特别是适用于多页面的应用,UNIAPP提供了良好的支持。 ### 骨架的作用 骨架是一种在数据加载过程中显示的临时界面,它模拟了最终内容的形式和布局,帮助用户理解数据正在加载,并减少等待感。这对于提高用户体验特别重要,在网络延迟较长的情况下尤其如此。 ### 实现多页自动生成骨架的方法 #### 使用 UNIAPP 的 `<uni-load-more>` 组件 UNIAPP 提供了一个 `<uni-load-more>` 组件,用于实现列表或数据加载更多功能。通过这个组件,你可以很容易地添加加载状态的展示,比如在列表顶部预加载部分数据,并展示骨架效果。当数据真正加载完毕时,骨架会被实际的数据替换掉。 示例如下: ```html <view class="content"> <uni-load-more :status="loadStatus" @click="onLoadMoreClick"> <!-- 数据列表渲染 --> <template v-for="(item, index) in items"> <!-- 每个 item 的展示逻辑 --> </template> <!-- 当前状态下的骨架展示 --> <div v-if="!items.length && loadStatus !== 'noMore'" class="skeleton-loading"> <!-- 根据需求调整 skeleton 的样式 --> <div class="skeleton-item"></div> <div class="skeleton-item"></div> <!-- 更多 skeleton 元素... --> </div> </uni-load-more> </view> ``` 在这个示例中,`items` 数组包含了当前页面的数据列表,`loadStatus` 属性控制着加载状态的显示,包括 `loading`、`noMore` 和默认的 `normal` 状态。当数据尚未加载或已经加载完所有数据时,会显示相应的骨架。 #### 利用 Vue.js 或者 UNIAPP 自带的状态管理库(如 Vuex) 为了在不同页面间共享加载状态,可以使用 Vue.js 的状态管理工具如 Vuex,或者直接利用 UNIAPP 提供的状态管理解决方案。这有助于统一管理和更新各个页面的加载状态信息,进而动态控制骨架的显示和隐藏。 #### 页面间切换与状态保存 为了实现在切换页面时保持加载状态和显示适当的骨架,可以在需要的地方监听路由变化,并更新全局或特定页面的加载状态。这通常涉及在 `beforeRouteEnter`, `beforeRouteUpdate` 或 `beforeRouteLeave` 中进行状态处理。 ### 示例代码段 假设我们有多个使用上述骨架策略的页面: ```javascript // store.js (Vuex 示例) import { createStore } from 'vuex'; export default new createStore({ state() { return { // 添加一个全局的加载状态属性 globalLoading: false, }; }, }); ``` ```vue <!-- 页面 A.vue --> <template> <uni-load-more :status="loadStatus" @click="onLoadMoreClick"> <!-- ...页面A的UI和数据展示... --> <div v-if="globalLoading && loadStatus === 'loading'" class="skeleton-loading"> <!-- ...页面A的骨架展示... --> </div> </uni-load-more> </template> <script setup> import { useStore } from 'vuex'; const store = useStore(); // ...其他代码... </script> ``` ### 相关问题: 1. **如何优化骨架的加载速度**? 可以考虑提前加载部分数据并逐步填充,避免一次性加载大量数据导致的性能瓶颈。 2. **如何在不同设备上适配骨架的尺寸**? 使用响应式设计,确保骨架元素的比例和大小适合各种幕尺寸和分辨率。 3. **如何提高用户体验,使得用户在等待数据加载时不感到烦躁**? 设计简洁直观的骨架界面,增加交互性(如滑动反馈等),并提供进度提示或动画,让用户知道加载正在进行中。 通过以上步骤和策略,你可以在 UNIAPP 开发的多页应用中实现高效、美观且增强用户体验的自动生成骨架功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值