手搓一个简简单单进度条

懂得都懂就不细细解剖,直接上代码

也就是太无聊,心血来潮搓一个小玩意儿

div盒子

ini 复制代码
<div class="progress-box">
	<div class="progress-bar" :style="{ width: `${progress.width}%` }">
	<div class="progress-bar-inner">
		<div class="progress-light"></div>
	</div>
	</div>						</div>
							<div class="progress-text">
	<span class="num" ref="countDemo"
	:style="{ left: `calc(${progress.width}% - ${Amountspent < 99 ? 66 :Amountspent > 999 && progress.width < 50 ? 40 : 70}px)` }">
	$ {{ Amountspent }}
	</span>
							</div>

js

xml 复制代码
<script setup>
	import { onMounted,ref } from "vue"
        //进度条相关参数
        const progress = ref({
		width: 0,
		startValue: 0,
		endValue: 0
	})
        const Amountspent = ref(0)
        	const progressVal = (start = 0, end = 0) => {
		const startVal = Number(start ?? 0) || 0
		const endVal = Number(end ?? 0) || 0
		return {
			width: endVal > 0 ? Math.min(Math.max((startVal / endVal) * 100, 0), 100).toFixed(2) : 0,
			startValue: startVal,
			endValue: endVal
		}
	}
        
        	onMounted(() => {
                //接口请求获取参数
		getprogressInfo({}, (res) => {
			if (!res) return

			if (res && res.data) {
let { totaAmount, amountspent } = res.data
Amountspent.value=amountspent?amountspent:0
	progress.value = progressVal(amountspent, totaAmount)//进度条


			}

		})

	})
</script>

css

xml 复制代码
<style lang="scss">
.progress-box {
			position: relative;
			border-radius: 500px;
			background: rgba(255, 255, 255, 0.05);
			padding: 2px;
			height: 10px;
			margin-bottom: 7px;

			.progress-value {
				position: absolute;
				left: 50%;
				top: 50%;
				transform: translate(-50%, -50%);
				color: #fff;
				text-align: center;
				font-size: 12px;
				font-weight: 800;
				line-height: 1;
				text-shadow: 0 2px 0 rgba(0, 0, 0, 0.1);
			}

			.progress-bar {
				height: 100%;
				width: 0;
				border-radius: 500px;
				background: #20ce2e;
				position: relative;
				box-shadow:
					0 0 3px 0 #00ff9d inset,
					0 0 7.5px 0 rgba(32, 206, 46, 0.6);

				.progress-bar-inner {
					position: absolute;
					right: -11px;
					top: -11px;
				}

				.progress-light {
					width: 30px;
					height: 30px;
					position: relative;
					border-radius: 50%;
					background-color: rgba(205, 222, 221, 0.1);

					&::before {
						content: "";
						position: absolute;
						top: 50%;
						left: 50%;
						transform: translate(-50%, -50%);
						width: 18px;
						height: 18px;
						border-radius: 50%;
						background-color: rgba(205, 222, 221, 0.1);
					}

					&::after {
						content: "";
						position: absolute;
						top: 50%;
						left: 50%;
						transform: translate(-50%, -50%);
						width: 10px;
						height: 10px;
						border-radius: 50%;
						background-color: #e7fefd;
					}
				}
			}
		}
                
                
		.progress-text {
			position: relative;
			/* padding: 2px; */
			height: 10px;
			margin-bottom: 10px;
			margin-right: 14px;

			.num {
				font-weight: 800;
				font-style: ExtraBold;
				font-size: 12px;
				line-height: 1.5;
				position: absolute;
				color: rgba(172, 188, 208, 1);
				width: 80px;
				display: inline-block;
				text-align: right;
			}
		}
相关推荐
FreeTinker4 小时前
HTML本地存储技术解析:localStorage与sessionStorage的原理、差异与应用场景
前端·html
qq_452396234 小时前
第十二篇:《全链路监控与可观测性:前端错误追踪与性能分析》
前端
wangruofeng5 小时前
Phosphor Icons 官网源码拆解:URL 即存储、水波动画与 7362 Star 图标库的架构实践
前端·架构·github
BigTopOne6 小时前
WebRTC Native / Android 开发学习资源整理
前端
excel7 小时前
nuxt 3 升级 nuxt 4 报错之 hasInjectionContext
前端
何以解忧,唯有..7 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
软件聚导航8 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
恋猫de小郭8 小时前
看懂大模型架构术语,帮助你理解目前常见的大模型开源架构
前端·人工智能·ai编程
yma168 小时前
通过提示词实现GitHub Pages 和 Nginx 双部署竟然这么简单?
前端
前端 贾公子9 小时前
第09章:上下文与记忆 (2)
java·服务器·前端