uniapp 实现 骨架屏组件- u-skeleton
u-skeletonUniApp 骨架屏组件概览什么是骨架屏为什么需要骨架屏组件特性三种模式插槽模式遮罩模式行列模式模式决策流程子组件skeleton-itemskeleton-textskeleton-avatarskeleton-image参考容器 Props子组件 Props动画说明常见问题u-skeleton 骨架屏组件为 UniApp 打造的高性能骨架屏方案 —— 三种模式、四种子组件、一个配置搞定一切加载态。什么是骨架屏骨架屏Skeleton Screen是一种在页面数据加载期间用灰色占位块模拟真实内容布局的加载反馈模式。相比传统的 Loading Spinner它能让用户提前感知页面结构降低等待焦虑。研究表明骨架屏比 Spinner 让用户感觉加载速度快 15%~20%。因为骨架屏提供了空间参照用户的大脑会「预渲染」页面产生「即将完成」的心理暗示。组件特性01三种模式插槽 / 遮罩 / 行列覆盖全部使用场景02四种子组件矩形、多行文本、头像、图片自由组合03主题继承provide/inject CSS 变量双通道04三种动画Shimmer 流光 / Pulse 脉冲 / Blink 闪烁05交错动画每个骨架块依次延迟波浪式扫过06渐隐过渡骨架消失时平滑淡出不闪烁跳变模式一插槽模式 推荐⚙原理说明通过 #skeleton 命名插槽声明骨架布局通过默认插槽声明真实内容。组件根据 show 属性在两者之间切换。替换模式coverfalse骨架消失时真实内容才 mounted避免重复渲染覆盖模式covertrue真实内容始终挂载骨架作为浮层覆盖在其上方替换模式用法vue u-skeleton :showloading animationshimmer :stagger60 !-- 骨架声明 -- template #skeleton view styledisplay:flex; padding:32rpx; u-skeleton-avatar size96 / view styleflex:1; margin-left:20rpx; u-skeleton-item width40% height32 :index0 / u-skeleton-item width70% height24 :index1 stylemargin-top:12rpx / /view /view view stylepadding:0 32rpx; u-skeleton-text :lines4 :index2 / /view view stylepadding:24rpx 32rpx; u-skeleton-image height360 radius16rpx / /view /template !-- 真实内容骨架消失后才 mounted -- article-page :dataarticle / /u-skeleton覆盖模式用法vue !-- covertrue: 真实内容始终挂载骨架浮于其上 -- u-skeleton :showloading cover template #skeleton view stylepadding:40rpx u-skeleton-avatar size128 stylemargin:0 auto 32rpx / u-skeleton-text :lines3 / /view /template profile-page / !-- mounted 立即执行 -- /u-skeleton**为什么插槽模式是推荐方案**它完全不依赖 createSelectorQuery在 H5、小程序、App 三端表现一致。同时消除了时序问题 —— 骨架布局由你声明不需要查询 DOM。模式二遮罩模式 兼容原理说明使用 createSelectorQuery 查询页面中带有.skeleton或自定义选择器类名的元素获取其尺寸和位置然后在 position: fixed 的遮罩层上用骨架块覆盖。自动检测用法vue template view u-skeleton :showloading selector.sk animationshimmer loadedonLoaded emptyonEmpty / !-- 这些元素会被骨架屏自动检测并覆盖 -- image classsk :srcavatar stylewidth:120rpx; height:120rpx; / text classsk styledisplay:block; width:60%; height:36rpx; 标题 /text /view /template手动声明用法vue u-skeleton :showloading :blocks[ { width: 120, height: 120, top: 40, left: 32, shape: circle }, { width: 50%, height: 36, top: 56, left: 172 }, { width: 80%, height: 24, top: 104, left: 172 }, { width: 100%, height: 300, top: 160, left: 32, radius: 16rpx } ] /**注意**遮罩模式依赖 createSelectorQuery在部分平台如 H5 的某些情况可能存在查询延迟。组件内置了最多 5 次自动重试机制但如果父组件渲染较慢建议使用插槽模式。模式三行列模式 快捷▦原理说明传入 rows 属性自动生成列表骨架布局。支持头像占位、文本行数控制、最后一行宽度设置。适合快速生成列表页骨架。vue u-skeleton :showloading :rows6 :lineCount2 :showAvatartrue avatarSize96 rowHeight28 rowGap36 lastLineWidth40% animationpulse /行列模式演示模式决策流程选择哪种模式按以下流程判断是否使用了 #skeleton 插槽是插槽模式否有 selector 或 blocks是遮罩模式否rows 0 ?是行列模式否空骨架子组件skeleton-item通用骨架块用于模拟矩形 UI 元素按钮、标签、输入框、分割线等。效果预览vue !-- 基础用法 -- u-skeleton-item width60% height32 / !-- 圆形 -- u-skeleton-item width80 height80 circle / !-- 胶囊按钮 -- u-skeleton-item width160 height64 round / !-- 自定义颜色 -- u-skeleton-item width100% height200 color#e0e0e0 highlight#f0f0f0 / !-- 交错动画配合容器 stagger -- u-skeleton-item width50% height28 :index0 / u-skeleton-item width80% height28 :index1 / u-skeleton-item width65% height28 :index2 /子组件skeleton-text多行文本占位自动将最后一行缩短以模拟真实段落。内置行间距和交错动画支持。3 行文本 / 最后一行 60%vue u-skeleton-text :lines4 height24 gap14 lastWidth45% :index0 /子组件skeleton-avatar头像占位。支持圆形和方形两种形状。circle / squarevue !-- 圆形头像 -- u-skeleton-avatar size96 shapecircle / !-- 方形头像 -- u-skeleton-avatar size96 shapesquare /子组件skeleton-image图片占位中央显示 emoji 图标作为视觉提示。图片占位vue u-skeleton-image width100% height400 radius16rpx /容器 Props 速查控制Prop类型默认值说明showBooleantrue是否显示骨架屏coverBooleanfalse插槽模式下内容是否常驻不销毁遮罩模式Prop类型默认值说明selectorString‘’自动检测的 CSS 选择器blocksArray[]手动骨架块声明数组queryDelayNumber100首次查询延迟 (ms)maxRetryNumber5查询最大重试次数retryIntervalNumber150重试间隔 (ms)行列模式Prop类型默认值说明rowsNumber0行数0 激活行列模式lineCountNumber2每行文本线数量lastLineWidthString/Number‘50%’最后一行宽度rowHeightNumber/String28行高rowGapNumber/String24行间距showAvatarBooleanfalse是否显示头像占位avatarSizeNumber/String80头像尺寸avatarShapeString‘circle’circle / squareavatarGapNumber/String20头像与文本间距外观 行为Prop类型默认值说明animationString‘shimmer’动画类型shimmer / pulse / blinkbgColorString‘#ebedf0’骨架底色highlightColorString‘#f5f6f8’Shimmer 高亮色borderRadiusString‘8rpx’默认圆角zIndexNumber9999遮罩层 z-indexfadeDurationNumber300渐隐过渡时长 (ms)staggerNumber60骨架块间交错动画延迟 (ms)事件事件参数说明loadedrects[]遮罩模式查询成功empty—重试耗尽仍未找到节点子组件 Props 速查skeleton-itemProp类型默认值说明widthString/Number‘100%’宽度heightString/Number‘32’高度radiusString‘’圆角空则继承容器circleBooleanfalse圆形radius: 50%roundBooleanfalse胶囊radius: 999pxblockBooleanfalse强制 display:blockanimString‘’动画类型空则继承容器indexNumber-1交错动画索引colorString‘’覆盖骨架底色highlightString‘’覆盖高亮色skeleton-textProp类型默认值说明linesNumber3文本行数heightString/Number‘28’行高gapString/Number‘16’行间距lastWidthString/Number‘60%’最后一行宽度animString‘’动画类型indexNumber0交错基准索引skeleton-avatarProp类型默认值说明sizeString/Number‘80’尺寸正方形shapeString‘circle’circle / squareanimString‘’动画类型skeleton-imageProp类型默认值说明widthString/Number‘100%’宽度heightString/Number‘360’高度radiusString‘’圆角animString‘’动画类型动画说明Shimmer推荐渐变光带从左向右扫过视觉效果最接近真实内容加载Pulsepulse整体明暗交替呼吸效果适合大面积色块Blinkblink简单透明度闪烁经典样式性能最优交错动画stagger通过 stagger 属性设置每个骨架块之间的动画延迟产生波浪式流光效果stagger: 80ms常见问题Q: 为什么遮罩模式获取不到节点父组件的异步数据可能还未渲染到 DOM。组件内置了最多5 次自动重试间隔 150ms你也可以调大 maxRetry 和 retryInterval。如果问题持续建议改用插槽模式。Q: 骨架屏和真实页面布局不一致骨架屏的布局应与真实内容保持相同的尺寸和间距。建议使用插槽模式在 #skeleton 插槽中用子组件精确复刻真实内容的布局结构。Q: H5 端 scrollTo 位置不正确遮罩模式使用 position: fixed 定位其坐标基准是视口。如果页面有滚动偏移骨架块的位置会自动与 boundingClientRect 返回的视口坐标对齐。如果出现偏差请检查页面是否有额外的 transform 或 will-change 属性影响了定位上下文。Q: 如何自定义颜色主题两种方式**容器级**通过 bgColor 和 highlightColor 设置所有子组件自动继承**组件级**通过子组件的 color 和 highlight 属性覆盖vue !-- 深色主题 -- u-skeleton bgColor#2a2a2a highlightColor#3a3a3a template #skeleton u-skeleton-text :lines3 / /template /u-skeletonQ: provide/inject 和 CSS 变量有什么区别两者是双通道主题传递机制provide/inject子组件通过 JS 访问容器的 animation、borderRadius、stagger 等配置CSS 变量–sk-bg、–sk-hl、–sk-r 让动画样式无需 JS 即可读取主题色两者协同工作确保无论是通过 props 还是 CSS 都能正确应用主题。u-skeleton v3.0 · UniApp 骨架屏组件 · 插槽 / 遮罩 / 行列 三种模式

相关新闻

connect 断线重连

connect 断线重连

本篇核心内容:实现带自动断线重连功能的 TCP 客户端。 断线重连是线上长连接程序高频刚需,大家日常打游戏时就能直观感受到:本地网络波动、服务器崩溃、网络完全中断,游戏客户端都会自动重试连接;达到最大重试次数后&…

2026/9/26 11:26:03 阅读更多 →
鸿蒙报错速查:装对象字量禁 as Object 编译炸,根因 + 真解法

鸿蒙报错速查:装对象字量禁 as Object 编译炸,根因 + 真解法

鸿蒙报错速查:装对象字量禁 as Object,arkts-no-untyped-obj-literals 编译报错,根因 真解法 报错原文 ERROR: 10605038 ArkTS Compiler Error Error Message: Object literal must correspond to some explicitly declared class or interf…

2026/9/29 5:08:36 阅读更多 →
AI多轮对话数据集构建与质量优化实战

AI多轮对话数据集构建与质量优化实战

1. 构建AI原生应用多轮对话数据集的核心挑战 在AI原生应用开发中,多轮对话系统的质量直接取决于训练数据的质量。与单轮QA不同,多轮对话需要建模复杂的上下文依赖关系,这对数据集的构建提出了三个维度的挑战: 对话连贯性 &#…

2026/10/16 0:33:55 阅读更多 →

最新新闻

AI PPT实战:从指令到专业级演示文稿的完整流程与检查清单

AI PPT实战:从指令到专业级演示文稿的完整流程与检查清单

周一晚上十一点,我临时接到一个任务:第二天一早要给团队内部分享一份关于智能家居市场趋势的演示材料。说实在的,以前这种活我一般要预留一个晚上慢慢磨——先想框架,再抠措辞,然后花大量时间调版式、换配色、找图标&a…

2026/10/16 14:46:53 阅读更多 →
BrowserSkill:面向AI时代的浏览器CLI自动化工具

BrowserSkill:面向AI时代的浏览器CLI自动化工具

1. 项目概述:BrowserSkill 是什么,它解决的到底是什么问题?BrowserSkill 这个名字乍一听像某个浏览器插件或 Chrome 扩展,但结合热词中反复出现的bsk、CLI、Chrome、Edge,以及与codex cli、zcode cli、trae cli、devec…

2026/10/16 14:46:53 阅读更多 →
插件系统原理与排障:从Qt平台插件到failed to load plugins实战

插件系统原理与排障:从Qt平台插件到failed to load plugins实战

1. 插件系统:知识工作者的效率杠杆点knowledge-work-plugins 这个名字听起来有点大,但它解决的问题非常具体:一个做知识工作的人,手头少说也有七八种工具——代码编辑器、IDE、笔记软件、命令行终端、文档生成器、绘图工具&#x…

2026/10/16 14:46:53 阅读更多 →
BrowserSkill:用CLI给AI agent装上浏览器操作能力

BrowserSkill:用CLI给AI agent装上浏览器操作能力

1. 从"浏览器自动化"到"给AI装一双手":BrowserSkill到底在解决什么浏览器自动化这件事,做了十几年了。从最早的 Selenium 驱动 WebDriver,到后来的 Puppeteer、Playwright,工具一直在进化,但核心矛…

2026/10/16 14:46:53 阅读更多 →
虚幻引擎角色加速系统:从物理参数到感知体验的完整实现

虚幻引擎角色加速系统:从物理参数到感知体验的完整实现

1. 项目概述:这不是“按住Shift就跑得快”的简单开关在虚幻引擎里做角色移动,很多人卡在第一个坑:明明蓝图里连好了“Add Movement Input”,也设置了“Max Walk Speed”,可角色一加速就飘、一转向就滑、一上坡就原地踏…

2026/10/16 14:46:53 阅读更多 →
STC8G I2C从模式代码调试指南:中断不进、数据错位排查与实战

STC8G I2C从模式代码调试指南:中断不进、数据错位排查与实战

简介:这份资源面向使用STC8G系列单片机进行嵌入式开发的工程师与学习者,聚焦I2C总线从模式的中断编程实践,帮助解决从机响应主机请求、数据收发与错误处理等典型问题。压缩包内共1个文件,为一份C语言源码,整体约1KB&am…

2026/10/16 14:45:52 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →