利用css动画和定时器setTimeout,实现上传图片进度条
思路
利用css动画和js定时器(setTimeout),实现简单的进度条。
优势
不使用 setInterval,减少js代码量,业务代码更加简洁。
示意图
| 上传中 | 上传成功 | 上传失败 |
|---|---|---|
![]() | ![]() | ![]() |
代码
html
<!-- img-wrap有两种状态:uploading(上传中)、uploadfailed(上传失败)-->
<div class='img-wrap uploading'><img src='' alt='' /><div class='img-state'><!-- progress-bar 有三种状态:progress-bar-status0、progress-bar-status1、progress-bar-status2--><div class='progress-bar'><div class='progress-innerbar'></div></div></div>
</div>
scss
.img-wrap {/*上传中、上传失败*/&.uploading, &.uploadfailed {/*黑色遮罩*/&::before {content: "";position: absolute;left: 0;right: 0;top: 0;bottom: 0;margin: auto;background: rgba(0,0,0,0.3);} }.img-state {/*底部进度条*/.progress-bar {width: 8.8rem;height: 0.4rem;position: absolute;left: 0;right: 0;bottom: 0.6rem;margin: auto;border-radius: 0.2rem;background: rgba(255,255,255,0.72);/*底部进度条(内部)*/.progress-innerbar {width: 0;height: 0.4rem;background: #FF5500;border-radius: 0.2rem;}/*进度条初始状态*/&.progress-bar-status0 {.progress-innerbar {width: 20%;-webkit-transition: width .5s linear;-moz-transition: width .5s linear;-o-transition: width .5s linear;transition: width .5s linear; /*动画时长500ms*/}}/*上传失败,进度条60%*/&.progress-bar-status1 {.progress-innerbar {width: 60%;-webkit-transition: width .5s linear;-moz-transition: width .5s linear;-o-transition: width .5s linear;transition: width .5s linear; /*动画时长500ms*/}}/*上传成功,进度条100%*/&.progress-bar-status2 {.progress-innerbar {width: 100%;-webkit-transition: width .5s linear;-moz-transition: width .5s linear;-o-transition: width .5s linear;transition: width .5s linear; /*动画时长500ms*/}}}}/*上传失败*/&.uploadfailed .img-state::after {content: "上传失败";position: absolute;left: 0;right: 0;top: 50%;margin: auto;-webkit-transform: translateY(-50%);transform: translateY(-50%);display: block;font-size: 1.1rem;line-height: 2rem;text-align: center;color: #fff;}
}
js
new Promise((resolve) => {// 执行上传图片方法uploadImage(base64) {$('.progress-bar').addClass("progress-bar-status0"); // 开始上传,进度条状态变成status0resolve()}
}).then((result) => {// 上传成功if(result.rc == 1) {// 上传成功,进度条状态变成status2$('.progress-bar').removeClass("progress-bar-status0 progress-bar-status1").addClass("progress-bar-status2");setTimeout(() => {$('.img-wrap').removeClass("uploading uploadfailed");$('.img-wrap').find('.img-state').remove();}, 500) // 假延时500ms,因为css动画需要500ms} // 上传失败else {// 上传失败,进度条状态变成status1$('.progress-bar').removeClass("progress-bar-status0 progress-bar-status2").addClass("progress-bar-status1");setTimeout(() => {$('.img-wrap').removeClass("uploading").addClass("uploadfailed");}, 500) // 假延时500ms,因为css动画需要500ms}})相关文章:
利用css动画和定时器setTimeout,实现上传图片进度条
思路 利用css动画和js定时器(setTimeout),实现简单的进度条。 优势 不使用 setInterval,减少js代码量,业务代码更加简洁。 示意图 上传中上传成功上传失败 代码 html <!-- img-wrap有两种状态:u…...
关于VScode插件,你不得不知道的几件事
一、前言 VSCode是微软家一个非常轻量化的编辑器,体量虽轻,但是却有异常强大的功能。原因在于VSCode许多强大功能都是基于插件实现的,IDE只提供一个最基本的框架和基本功能,我们需要使用插件来丰富和扩展它的功能。 由于插件的重…...
MySQL 奇遇记三则
公司新项目,要使用 MySQL 数据库。 第一次使用 MySQL,有点小激动。听说过 N 多次,这一次终于用上了。 为什么是奇遇记? 因为在网上几乎搜索不到别人遇到和我一样的问题。 系统 :WINDOWS10X64 中文版 数据库…...
UI设计师的主要职责说明(合集)
UI设计师的主要职责说明1 职责: 1、负责公司移动端、PC端产品相关的交互、UI等设计 2、负责公司宣传册、海报、运营物料、banner等设计 3、负责公司品牌相关的视觉设计 3、制定相关设计规范,提高产品的可用性、不断优化产品体验; 4、与PM、运营紧密…...
SOLIDWORKS 2023中装配体配合的正确使用方法 硕迪科技
-SOLIDWORKS 装配体打开时是由不同的阶段和性能检查组成的。如果在创建装配体时未应用基本的配合方法,问题会随着时间的推移而累积,并且在使用时会出现明显的速度减慢。 如果您的装配体运行速度很慢,则很可能是在创建配合时出现了不良操作的症…...
代码随想录——96.不同的二叉搜索树
class Solution {public int numTrees(int n) {int[] dp new int[n1];dp[0] 1;dp[1] 1;for(int i 2;i < n ; i){for(int j 1; j < i;j){dp[i] dp[j-1]*dp[i-j];}}return dp[n];} }...
智安网络|零信任安全框架:保障数字化时代网络安全的最佳实践
随着数字化时代的快速发展,网络安全问题变得越来越突出。传统的安全防御模式已经不再适用于现代复杂的网络环境中。为了应对日益增长的网络威胁,零信任安全模式应运而生。 一、什么是零信任? 零信任是一种安全框架和哲学,它基于…...
Rancher管理K8S
1 介绍 Rancher是一个开源的企业级多集群Kubernetes管理平台,实现了Kubernetes集群在混合云本地数据中心的集中部署与管理,以确保集群的安全性,加速企业数字化转型。Rancher 1.0版本在2016年就已发布,时至今日,Ranche…...
【Linux】一切皆文件
Linux 下一切皆为文件, 文件包括头文件,库文件(静态库和共享库),可执行文件,目录文件,软链接文件,配置文件等。 每个文件都依据权限分为用户、用户组和其他人三个身份,…...
C++学习笔记4
什么是指针? 指针是存储内存地址的变量。就像int变量用于存储整数值一样,指针变量用于存储内存地址。指针是一种指向内存单元的特殊变量。 内存单元地址通常使用的是16进制表示(0~9和A~F)来表示数字。显示…...
x11 gtk qt gnome kde 之间的区别和联系
Linux 下的图形库介绍 一、Linux 图形领域的基础设施 1.1 X Window X Window从逻辑上分为三层:X Server、X Client和X协议。 最底层的X Server(X服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘、鼠标的操作并将…...
MAC访问MySQL下的data目录
1.查看创建表存储路径 show variables like datadir 2.快捷键comshiftG,输入查询到的地址 3.终端输入 sudo chmod -R arwx /usr/local/mysql/data 然后输入密码即可...
WebMagic - 创意前端项目集合(点击链接可在电脑上查看效果)
WebMagic - 创意前端项目集合 欢迎来到 WebMagic 仓库!这里汇集了一系列令人惊叹的前端项目,涵盖了HTML5、CSS3和JS等多项技术。无论你是前端开发者、设计师,还是对创意互动内容感兴趣的人,这个仓库都将为你带来无尽的惊喜。 每…...
黑马项目一阶段面试58题 苍穹外卖业务逻辑15题
一、员工登录流程 1.前端在登录页面登录,发送请求 2.进入拦截器,拦截器放行所有登录页面的请求 3.进入三层架构,查询用户是否存在,若存在,则加盐加密,返回JWT的token,存放在请求头部。用户不…...
C++学习笔记总结练习: 字符串类MyString的实现
MyString是一个自定义的字符串类,它封装了一些常见的字符串操作和功能。下面是一个简单的MyString类的实现示例: #include <iostream> #include <cstring>class MyString { private:char* m_data; // 用于存储字符串的字符数组int m_length…...
测试人进阶技能:单元测试报告应用指南
为什么需要单元测试 从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需要相结合,但是缺乏了对产品研发细节(特别是代码细节的理解)。 从测试人员角度而言࿰…...
非2的幂次的ASTC纹理格式尺寸对带宽的影响
1)非2的幂次的ASTC纹理格式尺寸对带宽的影响 2)C#端如何处理xLua在执行DoString时候死循环 3)如何制定美术规范或者各个模块的指标 4)如何处理Lua的io.open出现中文路径 这是第348篇UWA技术知识分享的推送,精选了UWA…...
Java设计模式之策略模式
1. 策略模式介绍 1、根据它来避免 if-else 或 switch 分支判断,避免使用多重条件转移语句; 2、支持“开闭原则”,可以在原有基础上选择行为方法,同时允许增加行为方法。 2. 策略模式结构类 ① 接口或抽象类:自定义接口…...
IPv4分组
4.3.1 IPv4分组 IP协议定义数据传送的基本单元——IP分组及其确切的数据格式 1. IPv4分组的格式 IPv4分组由首部和数据部分(TCP、UDP段)组成,其中首部分为固定部分(20字节)和可选字段(长度可变࿰…...
Jmeter常用功能-参数化介绍
JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现。 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统。 这个时…...
HBM高带宽内存:从立体堆叠到2.5D封装的性能革命
1. 从平面到立体:HBM如何重塑内存性能天花板在半导体行业里,我们常把“摩尔定律”挂在嘴边,仿佛性能提升的唯一路径就是晶体管越做越小。但大约十年前,当工艺微缩的红利开始放缓,功耗墙和信号完整性问题日益严峻时&…...
基于MCP协议与AI的智能收据处理服务器:从OCR到结构化提取实战
1. 项目概述:一个专为收据处理而生的MCP服务器如果你经常需要处理各种格式的收据、发票或账单,无论是个人记账、公司报销,还是财务审计,那么你肯定对“数据录入”这个繁琐环节深恶痛绝。一张张纸质或电子收据,上面的关…...
CipherGuard:编译器级密文侧信道攻击防护技术解析
1. CipherGuard技术背景与核心挑战密文侧信道攻击(Ciphertext Side-Channel Attacks)已成为现代可信执行环境(TEE)中最棘手的安全威胁之一。这类攻击不直接破解加密算法本身,而是通过分析加密操作执行过程中产生的内存…...
告别时钟线!用三根线搞定高速传输:MIPI C-PHY硬件连接与编码原理详解
告别时钟线!用三根线搞定高速传输:MIPI C-PHY硬件连接与编码原理详解 在高速数据传输领域,传统并行总线的时钟同步机制已成为提升速率的瓶颈。MIPI联盟推出的C-PHY标准,以革命性的"三线无时钟"架构打破了这一僵局。本文…...
Godot 4 Steam联机插件:无缝替换ENet,快速接入Steam网络服务
1. 项目概述:一个为Godot 4游戏引擎设计的Steam多人联机插件 如果你正在用Godot 4开发一款PC端的多人游戏,并且希望它能通过Steam平台顺畅地联机对战,那么你很可能已经遇到了一个核心难题:如何将Godot内置的网络模块与Steam的联机…...
Node.js 服务端项目如何集成 Taotoken 实现稳定大模型调用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Node.js 服务端项目如何集成 Taotoken 实现稳定大模型调用 在构建现代服务端应用时,集成大模型能力已成为提升产品智能…...
企业级Angular微前端架构中,Claude如何安全介入模块拆分与契约校验(含TS类型推导审计日志)
更多请点击: https://intelliparadigm.com 第一章:企业级Angular微前端架构中Claude介入的边界与安全基线 在企业级 Angular 微前端系统中,将 Claude 类大语言模型(LLM)作为辅助开发工具引入时,必须严格界…...
终极指南:掌握AMD Ryzen深度调试的完整解决方案
终极指南:掌握AMD Ryzen深度调试的完整解决方案 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.…...
用Fiddler和Proxifier抓包分析易游网络验证API,手把手教你模拟合法请求
网络验证API抓包与模拟请求实战指南 在当今数字化产品生态中,网络验证机制已成为软件授权管理的核心组件。不同于传统的本地验证方式,网络验证通过远程API交互实现更高安全性的许可控制,这也使得协议层分析成为理解其工作原理的关键切入点。对…...
谷歌报告:犯罪黑客用AI发现零日漏洞,AI黑客攻击已成为现实!
AI零日漏洞攻击首现周一,谷歌发布报告,首次确认犯罪黑客使用AI大模型发现了一个此前未知的零日漏洞,差点发动大规模攻击。这意味着安全界担心多年的「AI自动挖洞」从理论变为现实。在Anthropic的Mythos模型已找到数千个零日漏洞的背景下&…...


