如何实现不确定进度条

不确定进度条通过循环动画传达系统正在处理,适用于无法预估完成时间的场景,如网络请求;而确定性进度条显示具体百分比,需明确任务总量与进度。选择取决于是否能可靠估算时间:不可预测时用不确定进度条,避免误导用户。纯CSS可通过@keyframes实现线性滑动或旋转加载器,如利用transform: translateX()创建移动条,或transform: rotate()实现旋转spinner,配合无限循环动画提升用户体验。常见样式包括线性条、旋转圈、跳动点和骨架屏,各适配不同UI需求。

如何实现不确定进度条

不确定进度条的实现核心在于通过动画效果,持续地向用户传达“系统正在处理中,请稍候”的信息,而无需告知具体的完成百分比。它通常用于那些我们无法准确预估完成时间的操作,比如网络请求、复杂的后台计算或文件上传到未知大小的服务器。

一个常见的实现思路是利用CSS的

animation

属性配合

@keyframes

来创建循环的视觉效果,例如一个不断移动的条块、一个旋转的加载图标,或者几个跳动的小圆点。关键在于动画的无限循环和流畅性,让用户感受到进程的活跃。

不确定进度条与确定性进度条有何区别,以及何时选择它们?

在我看来,这两种进度条虽然都旨在提升用户体验,但它们背后的设计哲学和适用场景是截然不同的。确定性进度条,顾名思义,它能明确显示任务的完成百分比,比如“下载进度:50%”。这种进度条要求我们能准确地知道任务的总量和当前已完成的量,这样才能计算出精确的百分比。它的优点在于给用户一个清晰的预期,用户可以据此判断任务还需要多久完成,从而决定是等待还是去做其他事情。

而不确定进度条,它传递的是一种“正在忙碌”的状态,但并不提供任何关于完成时间的信息。它通常表现为持续的、循环的动画,比如一个左右来回移动的条纹,或者一个不停旋转的圈。我们选择不确定进度条,往往是因为任务的完成时间真的不可预测,或者预估成本太高。比如,向一个外部API发送请求,我们无法控制对方的响应速度;或者进行一个复杂的数据库查询,其耗时可能因数据量、服务器负载而异。如果在这种情况下强行显示一个确定性进度条,很可能会因为预估不准而出现进度条卡顿、跳变,甚至“倒退”的情况,这反而会极大地损害用户体验,让用户感到困惑和焦虑。所以,我的经验是,当你无法提供一个可靠的完成时间时,就老老实实地用不确定进度条。它虽然没有百分比,但至少传达了“系统没有崩溃,只是在努力工作”的信息,这本身就是一种安慰。

如何用纯CSS实现一个简单的线性不确定进度条?

实现一个简单的线性不确定进度条,CSS是首选,因为它性能好,浏览器支持广泛。这里我喜欢用一个包含伪元素的容器,通过动画让伪元素在容器内来回移动,或者改变背景位置。

我们先来构建一个基本的HTML结构:

然后是CSS部分。核心思想是让

.bar

这个元素在它的父容器

.indeterminate-progress-bar

里动起来。我通常会给

.bar

一个背景色,然后让它通过

transform: translateX()

来回移动,或者利用

background-image

background-position

来制造流动感。

这里我给出一个基于

transform

的实现:

.indeterminate-progress-bar {  width: 100%;  height: 4px; /* 进度条的高度 */  background-color: #e0e0e0; /* 进度条的背景色 */  overflow: hidden; /* 隐藏超出部分 */  position: relative;  border-radius: 2px; /* 让边角圆润一些 */}.indeterminate-progress-bar .bar {  content: ''; /* 伪元素需要content属性 */  display: block;  height: 100%;  width: 30%; /* 移动条的宽度 */  background-color: #4CAF50; /* 移动条的颜色 */  position: absolute;  left: -30%; /* 初始位置,藏在左侧 */  animation: indeterminate-move 1.5s infinite ease-in-out; /* 动画效果 */}@keyframes indeterminate-move {  0% {    left: -30%; /* 从左侧完全隐藏开始 */  }  50% {    left: 100%; /* 移动到右侧完全隐藏 */  }  100% {    left: -30%; /* 再次回到左侧,形成循环 */  }}

这段代码创建了一个灰色背景的进度条容器,然后里面的绿色条块会从左到右滑过,然后瞬间回到左侧再次开始。

ease-in-out

让动画在开始和结束时速度放缓,中间加速,看起来会更自然一些。你也可以尝试让它来回摆动,那需要调整

@keyframes

的定义,比如:

@keyframes indeterminate-move-pingpong {  0% {    left: -30%;    transform: translateX(0);  }  50% {    left: 100%;    transform: translateX(-100%); /* 移动到最右边,然后自身也移动 */  }  100% {    left: -30%;    transform: translateX(0);  }}/* 然后在.bar中应用 animation: indeterminate-move-pingpong 1.5s infinite ease-in-out; */

但通常,我发现简单的从左到右循环就足够了,避免过度复杂的动画逻辑。

除了线性条,还有哪些常见的视觉样式,以及如何实现一个旋转加载器?

除了上面提到的线性条,不确定进度条还有很多种常见的视觉样式,它们各有特点,适用于不同的UI场景。我个人比较常用的是:

旋转加载器 (Spinner):这是最普遍的一种,一个不断旋转的环形或圆形图标。它不占用太多空间,适合放在按钮上、弹窗中央或者内容区域的局部加载。跳动/脉冲点 (Bouncing/Pulsing Dots):几个小圆点依次或同步地放大缩小、上下跳动。这种样式比较活泼,适合在聊天应用、评论提交等场景。骨架屏 (Skeleton Screen):这严格来说不是进度条,但它也是一种不确定加载的视觉反馈。在内容加载出来之前,先显示一个页面大致布局的灰色占位符,模拟内容的形状,给用户一种内容即将呈现的预期。这种方式用户体验非常好,因为它避免了白屏,让用户感觉内容加载得更快。

我们来尝试实现一个经典的旋转加载器 (Spinner)。这种通常也是通过CSS动画来完成的。

HTML结构可以很简单:

CSS实现:

.spinner {  width: 40px; /* 加载器的大小 */  height: 40px;  border: 4px solid #f3f3f3; /* 灰色背景环 */  border-top: 4px solid #3498db; /* 蓝色旋转部分 */  border-radius: 50%; /* 圆形 */  animation: spin 1s linear infinite; /* 旋转动画 */}@keyframes spin {  0% {    transform: rotate(0deg); /* 从0度开始 */  }  100% {    transform: rotate(360deg); /* 旋转到360度 */  }}

这个

spinner

样式会创建一个灰色的圆环,其中一部分是蓝色的,通过

rotate(360deg)

的动画,让蓝色部分看起来像是在不断地追逐自己,形成一个流畅的旋转效果。

linear

让旋转速度保持恒定,看起来非常机械和稳定。

如果你想让它看起来更复杂一点,比如像Material Design那种多色旋转,那可能需要更多的伪元素或者SVG,但核心思路都是利用

transform: rotate()

来实现旋转。我发现,在实际项目中,一个简单的单色旋转器往往就足够了,因为它既能清晰地表达“正在加载”的语义,又不会因为过于花哨而分散用户的注意力。选择哪种样式,最终还是取决于你的产品设计风格和具体的使用场景。

以上就是如何实现不确定进度条的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1574129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何实现错误提示消息
上一篇 2025年12月22日 16:02:45
HTML文档的元数据应该写在哪个部分
下一篇 2025年12月22日 16:02:58

相关推荐

  • PHP如何实现视频留言评论_PHP实现视频留言评论功能

    答案:通过数据库设计、前端表单、后端处理和评论展示四步实现PHP视频留言功能。1. 创建comments表存储信息;2. 构建表单提交昵称与评论;3. 用add_comment.php接收并存入数据库;4. 在页面读取并安全输出评论,防止XSS。 要实现视频留言评论功能,PHP可以结合前端页面、数据…

    2026年9月22日
    000
  • Java中如何区分逻辑错误和系统异常

    系统异常是程序运行中由JVM抛出的RuntimeException,如空指针、数组越界,会导致程序中断并打印堆栈;逻辑错误是程序语法正确但结果不符预期,如条件写反、循环次数错误,不会崩溃但行为异常。两者区别在于是否抛出异常、是否中断执行及调试方式不同,需通过防御性编程、单元测试和日志调试加以防范。 …

    2026年9月22日
    000
  • 夸克浏览器电脑网页版访问入口 夸克官网主页链接地址

    夸克浏览器电脑网页版访问入口是https://www.quark.cn/,用户可直接在浏览器地址栏输入该链接访问,其界面采用极简设计并集成智能搜索、网盘服务与跨设备同步等功能。 立即进入“☞☞☞☞☞点击夸克资源网(永久免费)入口☜☜☜☜☜”; 立即进入“☞☞☞☞☞点击夸克浏览器电脑网页版访问入口☜☜…

    2026年9月22日
    500
  • PHP一键环境如何设置网站域名解析_本地域名解析配置

    配置本地域名需修改hosts文件并设置Web服务器虚拟主机。1. 在hosts添加“127.0.0.1 myproject.test”实现域名解析;2. Apache中编辑httpd-vhosts.conf添加VirtualHost指向项目目录,确保加载该配置文件后重启服务;3. Nginx中在vh…

    2026年9月22日
    700
  • SonyCatalyst如何制作高质量AI视频?专业工具剪辑AI内容的指南

    Sony Catalyst通过素材筛选、视觉修正、色彩校正、细节雕琢与音频优化,将AI生成的粗胚视频精修为具备叙事感与视觉一致性的专业作品,其强大色彩管理、稳定器与降噪工具有效解决AI视频的抖动、噪点、色彩偏差等问题,并支持高分辨率素材处理与跨平台输出,实现AI内容与传统剪辑流程的高效融合。 ☞☞☞…

    2026年9月22日
    000
  • 谷歌浏览器窗口透明边框显示异常如何修复

    首先尝试修改快捷方式添加–disable-gpu –disable-software-rasterize参数,若可正常运行则关闭硬件加速,并重置chrome://flags实验功能及清除ShaderCache缓存文件。 谷歌浏览器出现窗口透明边框显示异常,通常和硬件加速或GP…

    2026年9月22日
    000
  • 如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧

    如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧如何在Dask中训练AI大模型?分布式数据处理的AI训练技巧

    Dask在处理超大规模数据集时的独特优势在于其Python原生的分布式计算能力,能无缝扩展Pandas和NumPy的工作流,突破单机内存限制,实现高效的数据预处理与模型训练。它通过惰性计算、分块处理和内存溢写机制,支持TB级数据的并行操作,相比Spark提供了更贴近Python数据科学生态的API和…

    2026年9月22日 用户投稿
    100
  • 抖音小店网页版怎么登录?抖音我的小店在哪里

    随着抖音电商平台的快速发展,越来越多的商家选择入驻该平台。作为商家运营的重要工具之一,抖音小店网页版为店铺管理带来了诸多便利。那么,如何正确登录抖音小店网页版?又该如何找到“我的小店”?下面将为您详细介绍。 一、为什么需要登录抖音小店网页版? 通过抖音小店网页版,商家可以高效地进行商品管理、订单处理…

    2026年9月22日
    000
  • 苹果官方正版验证入口 iPhone序列号查验正品入口

    苹果官方正品验证入口为 https://checkcoverage.apple.com/cn/zh/,用户可通过该网址输入iPhone序列号查验设备真伪及保障服务状态。操作步骤包括:打开浏览器访问官网,输入序列号并完成验证码验证后点击继续查询。序列号可通过“设置-通用-关于本机”、设备包装盒、机身背…

    2026年9月22日
    800
  • Qoder上线提示词增强功能 将开发者从“提示词”的负担中解放出来

    在 agentic coding 的新时代,一个关键挑战日益凸显:要得到卓越的答案,你必须先提出卓越的问题。 对开发者而言,这意味着需要投入大量时间去精心设计给ai的“提示词”。一句笼统的指令,比如“帮我写个函数”,往往只能换来一段简陋甚至存在安全隐患的代码;而一条清晰、结构完整、细节丰富的提示,则…

    2026年9月22日
    000
  • safari浏览器阅读列表如何使用_safari浏览器阅读列表使用方法

    可通过Safari阅读列表保存网页以便离线阅读。在iPad Air(iPadOS 17)中,打开网页后点击分享按钮,选择“添加到阅读列表”即可缓存页面;之后点击底部书本图标进入阅读列表,查看或管理已保存文章;向左滑动条目可删除,或通过“编辑”批量清理;开启iCloud同步后,登录同一Apple ID…

    2026年9月22日
    500
  • Pixc的AI工具怎么裁剪图片?一步步完成智能图片裁剪教程

    Pixc的AI工具怎么裁剪图片?一步步完成智能图片裁剪教程Pixc的AI工具怎么裁剪图片?一步步完成智能图片裁剪教程Pixc的AI工具怎么裁剪图片?一步步完成智能图片裁剪教程Pixc的AI工具怎么裁剪图片?一步步完成智能图片裁剪教程

    Pixc的AI工具通过智能识别主体与自动化裁剪,大幅提升图片处理效率与一致性,尤其适用于电商场景。用户只需上传图片,系统便自动完成背景移除、主体识别与推荐裁剪,支持批量处理、多比例选择及模板预设,兼顾效率与细节控制。相比传统手动裁剪,AI在处理速度、构图统一性上优势显著,虽在艺术性图片中仍有局限,但…

    2026年9月22日 用户投稿
    100
  • iPhone情侣模式如何同步双人相册?随时查看回忆的设置方法

    iPhone情侣模式如何同步双人相册?随时查看回忆的设置方法iPhone情侣模式如何同步双人相册?随时查看回忆的设置方法iPhone情侣模式如何同步双人相册?随时查看回忆的设置方法iPhone情侣模式如何同步双人相册?随时查看回忆的设置方法

    答案:使用iPhone共享相册可实现情侣间照片同步。首先双方开启iCloud照片共享,创建者在“照片”App中新建共享相簿并命名,邀请伴侣加入;对方接受邀请后,双方可上传、查看和评论内容。该功能为私密邀请制,不公开且不占用iCloud空间,支持最多5000张照片或视频,但照片最长边压缩至2048像素…

    2026年9月22日 用户投稿
    300
  • google浏览器如何导入其他浏览器的书签和密码_google浏览器导入书签和密码方法

    首先使用Google浏览器内置导入功能迁移书签和密码,选择源浏览器并勾选数据类型后导入;若无法识别,则通过HTML文件导入书签;密码可手动导出为CSV文件并在密码管理器中导入。 如果您需要将其他浏览器中的书签或密码迁移到 Google 浏览器,可以通过内置的导入功能快速完成数据转移。该操作适用于更换…

    2026年9月22日
    700
  • ​​VSCode的终极骚操作!学会这些让你的编程效率无人能敌

    掌握VSCode的高效技巧能显著提升编程效率。首先利用代码片段(Snippets)避免重复输入,如设置“rcomp”快速生成React组件结构;接着通过Emmet缩写大幅提升HTML/CSS编写速度,如“ul>li*3”生成列表;再结合Prettier、ESLint等插件优化代码质量与格式;自…

    2026年9月22日
    400
  • 利用HTML数组输入在PHP中处理多次表单提交

    本教程详细介绍了如何在同一页面通过php处理多次表单提交,同时避免数据覆盖,实现数据的累加显示。核心方法是利用html的数组输入(`name=”fieldname[]”`)来收集多个值,并通过隐藏字段(`hidden` inputs)在每次提交时保留并传递历史数据,最终在ph…

    2026年9月22日
    300
  • GPU 使用率低下的成因分析与排查解决指南

    GPU使用率低不等于显卡未工作,可能是任务流程中存在等待或瓶颈。先检查驱动是否更新、电源模式是否设为高性能、显卡连接与散热是否正常;再分析是否存在CPU预处理慢、存储速度低或频繁I/O导致GPU等待;最后优化应用设置,如提升画质、关闭垂直同步、减少后台占用。问题多出在流程瓶颈而非显卡性能不足。 GP…

    2026年9月22日
    200
  • PHP何时需要同时flush_PHP同时使用flush和ob_flush原因

    先调用ob_flush()将PHP输出缓冲区内容推送到底层,再调用flush()通知服务器立即发送数据,两者配合可穿透PHP和服务器缓冲层,实现输出实时性。 在PHP开发中,flush() 和 ob_flush() 经常被一起调用,目的是为了让输出内容及时发送到浏览器,而不是被缓冲机制延迟。要理解为…

    2026年9月22日
    100
  • safari浏览器怎么阻止网站访问剪贴板_safari浏览器阻止网站访问剪贴板方法

    可通过关闭网站剪贴板权限、启用无痕浏览、禁用JavaScript或使用内容拦截扩展来阻止Safari网站访问剪贴板,保护隐私安全。 如果您在使用 Safari 浏览器时发现某些网站尝试自动读取或写入剪贴板内容,可能会导致隐私泄露或意外粘贴敏感信息。为防止此类行为,您可以采取以下措施限制网站对剪贴板的…

    2026年9月22日
    1900
  • 移动端显卡性能释放对比:满血版RTX 4080 Laptop vs. 残血版

    移动端RTX 4080显卡的“满血版”与“残血版”核心区别在于功耗(TGP)释放,满血版可达175W,性能更强;残血版则被限制在百瓦以下,性能大幅缩水,选购时需关注具体功耗参数以避免被型号误导。 关于移动端显卡的“满血版”和“残血版”RTX 4080 Laptop对比,关键在于厂商对功耗(TGP)和…

    2026年9月22日
    400

发表回复

登录后才能评论
关注微信