更新记录
1.0.0(2026-07-15)
1.0.0
支持文本流光、列表、宫格、瀑布流等预设,适配 Android、iOS、鸿蒙。(支持蒸汽模式,蒸汽模式建议用hbuilderx alpha 5.21+)
平台兼容性
uni-app x(5.21)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | √ | √ | √ | - |
una-app-skeleton
una-app-skeleton 是一个面向 uni-app x 的骨架屏组件,核心使用 uvue 实现,适合 App Android、iOS、鸿蒙端的首屏加载、模块加载和长列表占位。
特性
- 支持
banner、info、text、menu、list、waterfall、custom多种预设 - 支持文本长条从左到右的窄流光动画,动画由 UTS 定时器驱动,不使用
@keyframes - 支持动画开关,
animated=false时展示静态骨架屏 - 支持包裹真实内容:
loading=false时自动渲染默认插槽 - 支持
scroll-view页面首屏骨架 - 长列表分页场景可只用于首屏加载,不接管分页逻辑
- 避免
@keyframes、row-gap、rpx、100vh等 App uvue CSS 易报错写法
基础用法
<template>
<una-app-skeleton :loading="loading" preset="list" :rows="2">
<view v-for="item in list" :key="item.id">
<text>{{ item.title }}</text>
</view>
</una-app-skeleton>
</template>
<script setup lang="uts">
const loading = ref<boolean>(true)
const list = ref<Array<any>>([])
onMounted(() => {
setTimeout(() => {
loading.value = false
}, 1200)
})
</script>
预设类型
<una-app-skeleton preset="banner" bannerHeight="118px" />
<una-app-skeleton preset="info" :paragraphLines="3" />
<una-app-skeleton preset="text" :textLines="4" />
<una-app-skeleton preset="menu" :menuCount="8" />
<una-app-skeleton preset="list" :rows="2" thumbnailPosition="left" />
<una-app-skeleton preset="waterfall" :waterfallRows="2" />
<una-app-skeleton preset="custom" :customCount="4" />
动画控制
<una-app-skeleton preset="list" mode="flow" :animated="true" />
<una-app-skeleton preset="list" mode="none" :animated="false" />
当前流光动画只作用在文本长条形骨架上,例如文本段落、列表标题、列表描述、菜单文字、瀑布流文字等。图片块、头像、图标等区域保持静态底色,避免加载态过度闪烁。
Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| loading | 是否显示骨架屏 | Boolean | true |
| preset | 骨架预设:banner / info / text / menu / list / waterfall / custom |
String | list |
| rows | list 行数 |
Number | 2 |
| card | 是否使用白色卡片容器 | Boolean | true |
| animated | 是否启用流光动画 | Boolean | true |
| mode | 动画模式:flow / none,兼容旧值 steam |
String | flow |
| showTitle | 是否显示骨架标题占位 | Boolean | false |
| paragraphLines | info / list 文本行数 |
Number | 3 |
| textLines | text 文本行数 |
Number | 4 |
| menuCount | menu 宫格数量 |
Number | 8 |
| waterfallRows | waterfall 每列数量 |
Number | 2 |
| customCount | custom 单元数量 |
Number | 4 |
| avatar | list 是否显示头像 |
Boolean | false |
| thumbnail | list 是否显示缩略图 |
Boolean | true |
| thumbnailPosition | 缩略图位置:left / right |
String | left |
| avatarSize | 头像尺寸 | String | 40px |
| menuIconSize | 菜单图标尺寸 | String | 40px |
| thumbnailWidth | 缩略图宽度 | String | 78px |
| thumbnailHeight | 缩略图高度 | String | 78px |
| bannerHeight | banner 高度 | String | 118px |
| titleWidth | 标题占位宽度 | String | 78px |
| titleHeight | 标题占位高度 | String | 15px |
| lineHeight | 文本占位高度 | String | 10px |
| gap | list 行间距 |
String | 10px |
| radius | 骨架块圆角 | String | 6px |
| baseColor | 基础色 | String | #F0F2F5 |
| highlightColor | 流光高亮色 | String | #FFFFFF |
分页建议
骨架屏建议只用于首屏空列表加载:
const firstLoading = ref<boolean>(true)
const loadingMore = ref<boolean>(false)
已有列表数据后加载下一页时,保留真实列表,只在底部显示“加载中”。不要分页时整页切回骨架,否则会闪屏。
兼容说明
- 基于
uni-app x/uvue - 样式单位使用
px - 未使用
@keyframes - 未使用
linear-gradient - 未使用
100vh - 未使用
display: block - 适合 App Android、iOS、鸿蒙端使用

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 41
赞赏 1
下载 12428033
赞赏 1934
赞赏
京公网安备:11010802035340号