当前位置: 首页 > news >正文

利用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}})
http://www.lryc.cn/news/128849.html

相关文章:

  • 关于VScode插件,你不得不知道的几件事
  • MySQL 奇遇记三则
  • UI设计师的主要职责说明(合集)
  • SOLIDWORKS 2023中装配体配合的正确使用方法 硕迪科技
  • 代码随想录——96.不同的二叉搜索树
  • 智安网络|零信任安全框架:保障数字化时代网络安全的最佳实践
  • Rancher管理K8S
  • 【Linux】一切皆文件
  • C++学习笔记4
  • x11 gtk qt gnome kde 之间的区别和联系
  • MAC访问MySQL下的data目录
  • WebMagic - 创意前端项目集合(点击链接可在电脑上查看效果)
  • 黑马项目一阶段面试58题 苍穹外卖业务逻辑15题
  • C++学习笔记总结练习: 字符串类MyString的实现
  • 测试人进阶技能:单元测试报告应用指南
  • 非2的幂次的ASTC纹理格式尺寸对带宽的影响
  • Java设计模式之策略模式
  • IPv4分组
  • Jmeter常用功能-参数化介绍
  • “深入探索JVM内部机制:解密Java虚拟机的工作原理“
  • C++超基础语法
  • 位运算相关题目:下一个数、整数转换、配对交换
  • 【数据结构】链表常见题目
  • 多家企业加入即将在2024年发射的量子卫星SpeQtral-1任务
  • shell脚本基础
  • 创建maven的Springboot项目出现错误:Cannot access alimaven
  • 神经网络基础-神经网络补充概念-32-神经网络与大脑
  • linux自动填充密码及提示信息
  • IC设计中主要的EDA工具有哪些? (内附EDA虚拟机安装资源)
  • Zabbix配置通用的TCP/IP:port监控项