Skeleton 骨架屏

骨架屏一般用于页面在请求远程数据尚未完成时,页面用灰色块预显示本来的页面结构,给用户更好的体验。

说明

该组件原理是通过uni的uni.createSelectorQuery接口,查询页面带有指定类名的元素的位置和尺寸, 通过绝对定位的方式,用同样尺寸的灰色块定位到相同的位置。
所以要求在请求数据尚未完成时,填写一些模拟数据,才能让对应的元素有对应的尺寸和位置,供uni.createSelectorQuery查询使用

平台差异说明

AppH5微信小程序支付宝小程序百度小程序头条小程序QQ小程序

基本使用

该组件的使用,需要有几个类名是必须的,如下:

  • u-skeleton(必须),该类名用于页面的最外层元素,供骨架屏组件查询和定位出绘制骨架的位置和尺寸
  • u-skeleton-circle(可选),该类名用于页面的圆形元素,供骨架组件描绘出圆形的骨架块
  • u-skeleton-rect(可选),该类名用于页面的矩形元素,供骨架组件描绘出矩形的骨架块
  • u-skeleton-fillet(可选),该类名用于页面的矩形带圆角元素,供骨架组件描绘出矩形带圆角的骨架块

数据请求完成后,将loading设置为false,会隐藏骨架组件

  1. <template>
  2. <view>
  3. <view class="container u-skeleton">
  4. <view class="userinfo">
  5. <block>
  6. <!--u-skeleton-circle 绘制圆形-->
  7. <image class="userinfo-avatar u-skeleton-circle" :src="userInfo.avatarUrl"></image>
  8. <!--u-skeleton-fillet 绘制圆角矩形-->
  9. <text class="u-skeleton-fillet">{{userInfo.nickName}}</text>
  10. </block>
  11. </view>
  12. <view style="margin: 20px 0">
  13. <view v-for="(item,index) in lists" :key="index" class="lists">
  14. <!--u-skeleton-rect 绘制矩形-->
  15. <text class="u-skeleton-rect">{{item}}</text>
  16. </view>
  17. </view>
  18. </view>
  19. <!--引用组件-->
  20. <u-skeleton :loading="loading" :animation="true" bgColor="#FFF"></u-skeleton>
  21. </view>
  22. </template>
  23. <script>
  24. export default {
  25. data() {
  26. return {
  27. // 随意填充一些模拟数据,以撑开元素,供骨架组件查询和模拟块状数据
  28. userInfo: {
  29. avatarUrl: 'https://qlogo2.store.qq.com/qzone/1416956117/1416956117/100?1531323520',
  30. nickName: 'uView'
  31. },
  32. lists: [
  33. '君不见,黄河之水天上来,奔流到海不复回。君不见,高堂明镜悲白发,朝如青丝暮成雪。',
  34. '人生得意须尽欢,莫使金樽空对月',
  35. '天生我材必有用,千金散尽还复来',
  36. ],
  37. loading: true, // 是否显示骨架屏组件
  38. }
  39. },
  40. onLoad() {
  41. // 通过延时模拟向后端请求数据,调隐藏骨架屏
  42. setTimeout(() => {
  43. this.loading = false;
  44. }, 2000)
  45. }
  46. }
  47. </script>
  48. <style lang="scss" scoped>
  49. .container {
  50. padding: 20rpx 60rpx;
  51. }
  52. .userinfo {
  53. display: flex;
  54. flex-direction: column;
  55. align-items: center;
  56. }
  57. .userinfo-avatar {
  58. width: 128rpx;
  59. height: 128rpx;
  60. margin: 20rpx;
  61. border-radius: 50%;
  62. }
  63. .lists {
  64. margin: 10px 0;
  65. }
  66. </style>

加载中动画

设置animationtrue,加载中的骨架块将会有一个动画效果,用以加强视觉效果。

  1. <u-skeleton :loading="true" :animation="true"></u-skeleton>

其他设置

  • 通过el-color参数设置骨架块的背景颜色
  • 通过bg-color参数设置整个骨架组件的背景颜色
  1. <u-skeleton :loading="true" el-color="#ddd" bg-color="#fff"></u-skeleton>

API

Props

参数说明类型默认值可选值
el-color骨架块状元素的背景颜色String#e5e5e5-
bg-color骨架组件背景颜色String#ffffff-
animation骨架块是否显示动画效果Booleanfalsetrue
border-radiusu-skeleton-fillet类名元素,对应的骨架块的圆角大小,单位rpxString | Number10-
loading是否显示骨架组件,请求完成后,将此值设置为falseBooleantruefalse